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)
  • 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

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
  • 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

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

 

 

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