28Jun
Teknologi / Softwareudvikling 0 Kommentarer

Forståelse af Clean Architecture

I den konstant udviklende verden af softwareudvikling er det altafgørende at bygge skalerbare, vedligeholdelsesvenlige og testbare applikationer. En arkitekturmæssig tilgang, der har opnået betydelig popularitet for at nå disse mål, er Clean Architecture. Robert C. Martin, også kendt som “Uncle Bob,” introducerede Clean Architecture som en softwaredesignfilosofi, der prioriterer adskillelse af bekymringer og vedligeholdelse. I sin kerne opdeler Clean Architecture applikationen i lag, hvor hvert lag har sit eget ansvar, hvilket gør styring og udvikling lettere. Applikationer, der følger Dependency Inversion Principle og Domain-Driven Design (DDD) principperne, inkorporerer Clean Architecture.

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.
Clean Architecture; horisontal lagoversigt

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.

  1. ➤ 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.
  2. ➤ 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.
  3. ➤ 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

Nuwan Pradeep
Full Stack Engineer