Clean Architecture fremmer softwarestruktur for
forbedret testbarhed, vedligeholdelse og skalerbarhed.
Det adskiller bekymringer og understøtter en fleksibel
kodebase, der kan tilpasse sig udviklende krav og
teknologier.
Målene med Clean Architecture
Clean Architecture sigter mod at skabe software, der er
let at forstå, vedligeholde og teste. Den lægger vægt på
adskillelse af bekymringer og oprettelse af
veldefinerede grænser mellem forskellige dele af
applikationen. Denne adskillelse muliggør lettere test
af individuelle komponenter.
Fordele ved Clean Architecture
-
➤ Uafhængighed af Framework: Kan
bruges med ASP.NET (Core), Java, Python osv., uden at
være afhængig af et specifikt softwarebibliotek eller
proprietær kodebase.
-
➤ Testbarhed: Kan bruges med ASP.NET
(Core), Java, Python osv., uden at være afhængig af et
specifikt softwarebibliotek eller proprietær kodebase.
-
➤ UI Uafhængighed: Logik holdes uden
for UI'en, hvilket gør det nemt at skifte teknologier,
f.eks. fra Angular til React eller Blazor.
-
➤ Database Uafhængighed: Ren
adskillelse af dataadgangsbekymringer, hvilket letter
ændringer fra SQL Server til CosmosDB.
-
➤ Uafhængighed fra Eksterne Systemer:
Kerne er fuldstændigt isoleret fra omverdenen, hvilket
sikrer langvarighed og lette opdateringer.
-
➤ Løs Kobling: Fremmer løs kobling
mellem komponenter og lag, hvilket forbedrer
vedligeholdelse og skalerbarhed.
Clean Architecture: Det Store Billede
-
1. Forretningslogik og Applikationsmodel i
Centrum:
Sikrer, at de vigtige aspekter af softwaren er
uafhængige og veldefinerede.
-
2. Inverteret Afhængighed:
Forretningslogik afhænger ikke af dataadgang eller
infrastrukturbekymringer; i stedet afhænger
infrastrukturen af Applikationskernen.
-
3. Klare Abstraktioner i
Applikationskernen:
Definerer klare abstraktioner (interfaces), der
repræsenterer essentielle kontrakter.
-
4. Implementering i Infrastruktur-laget:
Konkrete implementeringer findes i
Infrastruktur-laget, som håndterer dataadgang,
eksterne tjenester osv.
-
5. Indadgående Flow af Afhængigheder:
Alle afhængigheder flyder indad mod
Applikationskernen, hvilket sikrer streng adskillelse
af bekymringer.
Lag i Clean Architecture
-
➤ Domæne Lag: Kernen i arkitekturen,
der implementerer forretningslogik uden afhængigheder
af andre lag.
-
➤ Applikations Lag: Mellem lag, der
håndterer data mellem domæne- og
præsentations/infrastruktur lagene.
-
➤ Infrastruktur Lag: Indeholder
klasser til adgang til eksterne ressourcer som
filsystemer, webtjenester og databaser.
-
➤ Præsentations Lag: UI-kode, der
bruger ASP.NET Core til at bygge grænseflader.
Domain Driven Design (DDD)
Domain-Driven Design (DDD) er et sæt af principper og
mønstre til design af software, der fokuserer på kernen
af domænet og dets logik. DDD lægger vægt på samarbejde
mellem tekniske og domæneeksperter for iterativt at
forfine en konceptuel model, der adresserer komplekse
forretningskrav. De vigtigste koncepter i DDD omfatter:
• Enheder: |
Objekter med en distinkt identitet, der gennemgår
forskellige tilstande i systemet.
|
• Værdiobjekter: |
Immutable objekter, der repræsenterer en beskrivende
aspekt af domænet uden konceptuel identitet.
|
• Aggregater: |
En klynge af domæneobjekter, der behandles som en
enkelt enhed for datamodifikationer.
|
• Repositories: |
Mechanismer til at kapsle opbevaring, hentning og
søgeadfærd, der efterligner en samling af objekter.
|
Testning i Clean Architecture
Testning i Clean Architecture involverer test af hver
lag uafhængigt for at sikre, at alle komponenter
fungerer korrekt og interagerer ordentligt med hinanden.
Dette er et meget vigtigt skridt og reducerer betydeligt
kompleksiteten.
-
➤ Mocking: Oprettelse af objekter,
der simulerer adfærden af reelle objekter. I dette
tilfælde kan du mocke dine database-repositories uden
den faktiske implementering.
-
➤ Dependency Injection: Overførsel af
afhængigheder (som repositories) til dine use cases
eller services for at gøre dem lettere at udføre
enhedstest.
-
➤ Isolation: Sikring af, at hver test
er uafhængig og ikke er afhængig af tilstand eller
data fra andre tests.
Implementering af Clean Architecture
-
1. Konfiguration af Domæne Lag:
Definer enheder, enums, undtagelser, interfaces og
typer.
-
2. Konfiguration af Applikations Lag:
Skriv forretningslogik og service interfaces, og
oprethold løs kobling.
-
3. Konfiguration af Infrastruktur Lag:
Implementer dataadgang og interaktion med eksterne
ressourcer baseret på Core interfaces.
-
4. Konfiguration af Præsentations Lag:
Implementer præsentationslagets logik og grænseflader.
Principper at Følge
1. Separation af Bekymringer: |
Undgå at blande forskellige kodeansvar i den samme
metode/klasse/projekt.
|
2. Enkel Ansvar: |
Hver modul/komponent bør have kun én grund til at
ændre sig.
|
3. Don’t Repeat Yourself (DRY): |
Undgå duplikeret kode eller logik. |
4. Inverterede Afhængigheder: |
Højniveauretningslinjer bør ikke afhænge af
lav-niveau detaljer; brug afhængighedsinjektion for
at fremme løs kobling.
|
Konklusion
Clean Architecture giver en robust grundlag for
opbygning af mikroservices ved hjælp af .NET Core Web
API. Ved at overholde principperne om separation af
bekymringer og afhængighedsinversion kan udviklere skabe
skalerbare, vedligeholdelsesvenlige og testbare
applikationer. At omfavne Clean Architecture sikrer et
solidt fundament for de stadigt skiftende krav i moderne
softwareudvikling.
Lær mere ved at besøge vores GitHub