Hemit.Common
Status 2024
Agenda
- Hva er Hemit.Common?
- Hvorfor et fellesbibliotek?
- Utfordringer
- Konsumenter
- Hva er innholdet i dag
- Kodeeksempler
- Fremtiden
- Refleksjon / spørsmål / kommentarer
Hva er Hemit.Common?
- Et fellesbibliotek for felles gjenbrukbar kode
- .NET standard (så lenge vi har .NET Framework prosjekter)
- Flere pakker (for å holde nødvendige avhengigheter nede)
- Ekstra kvalitetssikret
- Ligger som eget prosjekt i ADO
- Alle har tilgang?
- Har egen kanal #hemit-common på slack
- Alle er medlem?
- Påstartet tidlig 2021 med tilhørende kollokvie
- Tanken er å samle kode som brukes av, eller har (fremtidig) verdi for, minimum to av Hemit sine applikasjoner
Hvorfor et fellesbibliotek
- Kvalitet (og sikkerhet)
- Mindre volum kode å vedlikeholde / sentralisert vedlikehold
- Flere interessenter/øyne på koden
- Krav om testdekning, dokumentasjon og kodegjennomgang
- Gjenbrukbarhet
- Dumt kopiere kode mellom prosjekter
- Raskere utvikling
- Etterhvert mer og mer kode/byggeklosser klare til bruk
- Standardisering
- Ha en måte å løse samme sak på
- Samarbeid og samhold på tvers av team
Hvorfor et fellesbibliotek 2
Eksempel i praksis på hvorfor det lønner seg med en fellesbibliotek
- Extension:
- String Truncate
- TimeSpan ToDisplayText
- Util:
- Lage kryptert zip
Utfordringer
- Tyngre utviklingsprosess å måtte lage kode i Hemit.Common og vente på ny versjon
- Løsninger
- Lag koden i Hemit.Common med tester. Kopier inn koden til prosjektet og bevar namespace, man får da byggefeil den dagen Hemit.Common pakkene oppdateres og kopien kan slettes
- Lag koden i prosjektet, og flytt til Hemit.Common senere
- Løsninger
- Arbeidssomt å få ut ny versjon av Hemit.Common
- Løsninger
- Automatisk nattlige versjoner, evt. manuelt trigget
- Enkelt format på versjonsnummer, må kun manuelt følges opp ved knekkende endringer
- Løsninger
Utfordringer - del 2
- Noen må holde liv i Hemit.Common for at det ikke skal dø ut, bestemme hvordan det skal struktureres og vedlikeholdes
- Løsninger
- Noen har det overordne ansvaret
- Avholde jevnlige kollokvier om Hemit.Common
- Løsninger
- Endringer i eksisterende kode i Hemit.Common kan knekke et prosjekts bruk av koden
- Løsninger
- Endringer i eksisterende kode må kvalitetssikres grundig, viktig med god testdekning
- Hvis bruken ikke er dekket av eksisterende tester i Hemit.Common - bør testene utvides
- PRs med minimum to reviewers - se gjerne på historikken til endret kode og bruk utviklerne som har bidratt rundt koden tidligere
- Den som oppgraderer Hemit.Common i et prosjekt har ansvaret for å ettergå endringer siden sist versjon og hva det har å si for prosjektets bruk
- Løsninger
Utfordringer - del 3
- Utviklere vet ikke hva som ligger i Hemit.Common og lager egne løsninger
- Løsninger
- Alle følger slack kanalen hvor det informeres om nye versjoner
- Alle har tilgang til kodebasen
- Avholde jevnlige kollokvier om Hemit.Common
- Løsningsarkitekt sørger for fremme aktiv bruk av Hemit.Common i nye prosjekter og vedlikehold av eksisterende
- Code review - oppfordre til å bruke Hemit.Common der man ser det kan gjøres
- Løsninger
Utfordringer - del 4
- Extensions vs Util: Extensions fyller intellisensen med forslag, utils kan være vanskeligere vite eksiterer
- Løsninger
- Bruker extensions der en metode generell / stort bruksområde
- Bruker utils der bruksscenariet er snevert
- Løsninger
- Det blir liggende kode i Hemit.Common som ikke brukes i noen applikasjon lenger
- Løsninger
- Sammenstilling av alle prosjekter som bruker Hemit.Common og ettergå metode for metode? Vil ikke skje ofte.
- Løsninger
Konsumenter
- eFORSK
- MRS
- Kjerneprosjekter (~4)
- Alle registre (~40)
- Støtteapplikasjoner
- ePROM
- med flere?
Breddes forsiktig
Krav om at det inkluderes fra start på nye prosjekter!
Hva er innholdet i dag
1036 enhetstester
(573 enhetstester sist kollokvie 2022)
Hva er innholdet i dag 2
Større ting:
- Eksport og import av data
- excel, csv, json og xml <=> DataTable
- SPSS implementeres nå!
- Excelverktøy (EPPlus)
- Hashverktøy
- Krypteringsverktøy
- Kloning - Deep copy be expression trees
- Cacheverktøy
- Integrasjonsverktøy og integrasjoner
Hva er innholdet i dag 3
- Extensions
- string, object, datetime, datatable, osv
- Passordgenerering - etter beste praksis
- NorwegianPersonIdentifierUtil - sjekk gyldig format og type fødselsnummer: hjelpenummer, d-nummer osv.
- Datotid - beregninger rundt alder, kvartal, tertial. Snarveier for å sette tid, hoppe til start/slutt av dag, måned.
- Typer
- IDateTime - interface for å gi Now
- ISkipAndTake og ISearchResult<T>
Kodeeksempler
Kodeeksempler
Gå fra JSON til DataTable til excel-fil
Kodeeksempler
Lage excel-fil med formattering
Ny muligheter i det siste:
- Låse øverste rad ved scroll
- Spesifikk kolonnebredde
Kodeeksempler
StandardCryptUtil
{
"A":"A256",
"K":"MyKey",
"I":"ukHj1BBalCLlcdeKn0E6Tg==",
"E":"E5o3p9jW3HZ85T3QNx6ziQ=="
}
Kodeeksempler
Sørg for unike navn
Hva kommer i fremtiden?
- Moderne .NET
- Mer integrasjonskode?
- Mer autentiseringshjelpere, DPoP osv
- HPR
- Kodeverk? finnkode.helsedirektoratet.no
- Mer standard typer?
Refleksjon
Spørsmål
Kommentarer
Title Text
Hemit.Common 2024
By Eilev Hagen
Hemit.Common 2024
- 3