6.1 Nedbrydning
På trods af de mange forskellige kriterier er hovedopgaven i udviklingen af store systemer opgaven med at reducere kompleksiteten af systemet . For at reducere kompleksiteten er der endnu ikke opfundet andet end opdeling i dele.
Nogle gange kaldes dette for enkelheds skyld princippet om "del og hersk", men fra softwarearkitektens synspunkt taler vi om hierarkisk nedbrydning .
Et komplekst system skal bygges af et lille antal simplere delsystemer, som hver for sig er bygget af mindre dele, og så videre, indtil de mindste dele er enkle nok til at blive direkte forstået og skabt.
Den gode nyhed er, at denne løsning ikke kun er den eneste kendte, men også universel. Ud over at reducere kompleksiteten giver det samtidig systemfleksibilitet , god skalerbarhed og øget modstandsdygtighed ved at duplikere kritiske dele.
Når det kommer til at opbygge programmets arkitektur, skabe dets struktur, betyder dette at dekomponere programmet i undersystemer, tjenester, lag, subrutiner og funktionelle moduler og organisere deres interaktion med hinanden og omverdenen.
Og det mest værdifulde her er dette: Jo mere uafhængige delsystemerne er, jo sikrere er det at fokusere på udviklingen af hver af dem separat på et bestemt tidspunkt og ikke bekymre sig om alle de andre dele.
6.2 Fordele ved modulær arkitektur
Ved at bruge princippet om hierarkisk nedbrydning kan du slippe af med kaos i tusindvis af klasser af din kode. Husk at din kode er opdelt i pakker (pakke) og underpakker? Dette er et af udtryk for hierarkisk nedbrydning.
Dit program bliver fra en flok klasser til et sæt biblioteker og moduler, der interagerer med hinanden i henhold til veldefinerede og enkle regler. Dette giver dig til gengæld mulighed for at kontrollere dens kompleksitet, og giver dig også mulighed for at få alle de fordele, der normalt er forbundet med konceptet om en god arkitektur.
Her er de mest grundlæggende:
- Skalerbarhed - evnen til at udvide systemet og øge dets ydeevne ved at tilføje nye moduler.
- Vedligeholdelse - ændring af et modul kræver ikke ændring af andre moduler.
- Udskiftelighed af moduler (Swappability) - modulet kan nemt udskiftes med et andet.
- Enhedstest – En enhed kan adskilles fra alle andre og testes/repareres .
- Genbrugelighed - modulet kan genbruges i andre programmer og andre miljøer.
- Vedligeholdelse – et program, der er opdelt i moduler, er lettere at forstå og vedligeholde.
Det kan siges, at det er målet for alle designteknikker at bryde et komplekst problem i simple fragmenter . Og udtrykket "arkitektur" refererer i de fleste tilfælde blot til resultatet af en sådan opdeling plus "nogle designbeslutninger, som, når de er vedtaget, er svære at ændre" (Martin Fowler "Architecture of Enterprise Software Applications").
Derfor koger de fleste definitioner i en eller anden form ned til følgende:
" Arkitektur identificerer hovedkomponenterne i systemet, og hvordan de interagerer. Det er også valget af sådanne beslutninger, der tolkes som grundlæggende og ikke kan ændres i fremtiden ."
" Arkitektur er organiseringen af et system, inkorporeret i dets komponenter, deres forhold til hinanden og med miljøet. Et system er et sæt komponenter kombineret for at udføre en bestemt funktion ."
En god arkitektur er således først og fremmest en modulær/blokarkitektur . For at få en god arkitektur skal du vide, hvordan du nedbryder systemet korrekt. Det betyder, at det er nødvendigt at forstå, hvilken nedbrydning der anses for at være "korrekt", og hvordan det er bedst at udføre det.
GO TO FULL VERSION