Hemit.Common
Status 2022
Agenda
- Hva er Hemit.Common?
- Hvorfor et fellesbibliotek?
- Konsumenter
- Hva er innholdet i dag
- Kodeeksempler
- Hva er innholdet i fremtiden
- Utfordringer
- Refleksjon / spørsmål / kommentarer
- Vi dykker evt ned i kode hvis tid og interesse
Hva er Hemit.Common?
- Et fellesbibliotek for felles gjenbrukbar kode
- .NET standard
- Flere pakker
- 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
- 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
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
573 enhetstester
Hva er innholdet i dag
Større ting:
- Eksport og import av data
- excel, csv, json og xml <=> DataTable
- Excelverktøy (EPPlus)
- Hashverktøy
- Standardisert interface.
- SHA256 implementasjon
- Krypteringsverktøy
- Standardisert interface
- Implementasjon med AES256 og lav overhead
- Implementasjon av standard JWE (JSON Web Encryption)
- Kloning - Deep copy be expression trees
Hva er innholdet i dag
Mindre ting:
- 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. Snarveier for å sette tid, hoppe til start/slutt av dag, måned.
- IDateTime - interface for å gi Now
Kodeeksempler
Kodeeksempler
Gå fra JSON til DataTable til excel-fil
Kodeeksempler
Lage excel-fil med formattering
Kodeeksempler
StandardCryptUtil
{
"A":"A256",
"K":"MyKey",
"I":"ukHj1BBalCLlcdeKn0E6Tg==",
"E":"E5o3p9jW3HZ85T3QNx6ziQ=="
}
Kodeeksempler
Sørg for unike navn
Hva er innholdet i fremtiden
- Integrasjonskode
- Persontjenesten - påbegynnes snart
- HPR nummer?
- Kodeverk? (ICD10, SNODMED-CT)
- Interfacer?
- IUser?
- Verktøy?
- Randomiseringsverktøy for testdatagenerering?
Utfordringer
- Tyngre utviklingsprosess å måtte lage kode i Hemit.Common og vente på ny versjon
- Løsninger
- Hyppige versjoner (nattlig etter godkjent PR, evt. manuelt trigget)
- Lag koden i Hemit.Common med tester. Kopier inn koden til prosjektet sitt merket med TODO om å slette koden når ny versjon av Hemit.Common er klar
- Lag koden i prosjektet, og flytt til Hemit.Common senere (mindre sjanse for at det blir gjort, anbefaler forrige punkt)
- 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
- 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
- Jevnlig status/oppfordringer på kollokvium
- Løsningsarkitekt sørger for fremme aktiv bruk av Hemit.Common i nye prosjekter og vedlikehold av eksisterende
- Løsninger
Utfordringer - nye observasjoner
Grensen mellom hva som bør være extension og hva bør være en "Util". Extension fyller opp intellisens. Utils blir kanskje ikke oppdaget.
Død/ubrukt kode: Hvordan vet vi når kode i Hemit.Common ikke har konsumenter lenger?
Refleksjon
Spørsmål
Kommentarer
Se på kode
Hemit.Common
By Eilev Hagen
Hemit.Common
- 31