Applikasjonsarkitektur
Applikasjonen er bygd med følgende teknologier:
- ASP.NET MVC Core 2.1: Microsofts nyeste web-plattform, skrevet fra bunnen av for å unngå bagasje fra gamle ASP.NET. Gir bedre ytelse, lettere oppsett av avhengigheter, konfigurasjon, logging og middleware.
- Entity Framework Core: Vi har reverse-engineered en EF datamodell fra datasett-databasene. Det gir oss typesterk tilgang til databasen, og meget bra ytelse på genererte spørringer.
- React & Redux: Facebooks view-bibliotek React kombinert med Redux for tilstandshåndtering. Gjør det mulig å bygge opp applikasjonen i form av enkeltkomponenter som kan kombineres og utvides. Redux gjør det enkelt å resonnere om applikasjonens tilstand, og forstå hvor endringer skjer.
- TypeScript: Ved å bruke et typesterkt språk som kompilerer til JavaScript, fanger vi opp de aller fleste feil allerede i kompileringssteget. Vi kan også ta i bruk nyere ECMAScript-funksjoner som blir transpilert ned til kode som kjører i alle nettlesere.
- MediatR: Et bibliotek for å løskoble requests fra implementasjon. Gjør at man kan lage mindre klasser som gjør færre ting, og dermed isolere endringer bedre.
- xUnit: Vi bruker xUnit for å kjøre enhetstester og integrasjonstester.
- Webpack: Webpack brukes til utvikling og kompilering av frontend-assets, med Hot Module Reloading. Det gjør at vi kan gjøre endringer i TypeScript-koden, og applikasjonen vil automatisk bli oppdatert uten å måtte manuelt refreshe.
Versjoner
Nøyaktige versjoner av alle avhengigheter kan finnes i package.json for frontend, og de ulike .csproj-filene for backend.
Prinsipper
- Vertikale feature slices heller enn horisontale applikasjonslag. Separerer ansvar og isolerer endringer.
- Én "Single-Page Application" per side. Gjør at man kun trenger laste inn koden for siden man er på, ikke andre sider.
- Caching av ressurser som leses ofte, f.eks. områdeinfo og tilganger. Gir bedre responstid.
Struktur
Applikasjonen består av 3 prosjekter:
- NaturBase.Common: Felles verktøy og klasser som ikke har direkte med Naturbase-domenet å gjøre
- NaturBase.Data: Inneholder DB-contexts, entitets-klasser, migreringer og database-spesifikk logikk
- NaturBase.Web: Inneholder selve applikasjonen, web-spesifikke verktøy, og alle features som utgjør applikasjonen
Under NaturBase.Web er det noen mapper som er verdt å merke seg:
- ClientApp: All frontend-kode ligger her, inndelt i ulike mapper. Alle sider ligger under pages.
- Features: Alle datasett ligger i hver sin feature-folder, som inneholder controllers, models og views for gitt feature.
- wwwroot: Statiske filer som publiseres som applikasjonens rot. Inneholder også dokumentasjon, og LocalizationAdmin (tredjeparts verktøy for tekstredigering, se Tekstredigering)