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
  • 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
      • Den som oppgraderer Hemit.Common i et prosjekt har ansvaret for å ettergå endringer siden sist versjon og hva det har å si for prosjektets bruk

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

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

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