Tovább a tartalomhoz

09: Attribute-Driven Design

A megelőző gyakorlaton egy C4 System Context diagramot készítettünk, mely egyetlen fekete dobozként jeleníti meg a rendszerünket. Ezen a ponton ez az ábrázolás meg is felel a valóságnak: bár már választottunk architekturális stílust, azonban a rendszert felépítő kisebb alkotórészekről még semmilyen konkrét elképzelésünk nincs.

Most már viszont itt az ideje, hogy „belezoomoljunk” a rendszerbe, és elkezdjük a kisebb részekre bontását, finomítását.

Erre a felbontásra és finomításra szolgál az Attribute-Driven Design (ADD) nevű módszer, mely egy strukturált, iteratív tervezési eljárás.

A módszer elve rendkívül egyszerű: kiindulva a szignifikáns követelményekből és egy létező architektúrából (mely lehet csupán egyetlen doboz is, a teljes rendszer), iteratívan addig finomítunk, amíg a kapott architektúra meg nem felel a követelményeknek.

Valahogy így (bátran nagyítsuk az oldalt!):

flowchart TB subgraph DRIVERS[ ] direction LR DP[Design purpose] PFR[Primary functional requirements] QAS[Quality attribute scenarios] CON[Constraints] AC[Architectural concerns] end S1[Step 1: Review inputs] S2[Step 2: Establish iteration goal] S3[Step 3: Refine system elements] S4[Step 4: Choose design concepts] S5[Step 5: Instantiate architecture] S6[Step 6: Sketch views and decisions] S7[Step 7: Analyze current design] OUT([Refined Software Architecture Design]) S1 --> S2 --> S3 --> S4 --> S5 --> S6 --> S7 --> OUT DP -.-> S1 PFR -.-> S1 QAS -.-> S1 CON -.-> S1 AC -.-> S1 EX[From previous rounds or existing system] EX -.-> S1 classDef driver fill:#b71c1c,stroke:#222,color:#fff,stroke-width:2px; classDef step fill:#a9b7e8,stroke:#222,color:#fff,stroke-width:2px; classDef output fill:#dfe8d6,stroke:#222,color:#222,stroke-width:2px; classDef note fill:transparent,stroke:transparent,color:#222; class DP,PFR,QAS,CON,AC driver; class S1,S2,S3,S4,S5,S6,S7 step; class OUT output; class EX note; style DRIVERS fill:transparent,stroke:transparent

A C4 modell egy hierarchikus fogalom- és diagramrendszer.

A teljes rendszer (avagy, system) után a hierarchia következő fogalma a container, mely lehet többek közt:

  • szerver-oldali webalkalmazás,
  • szerver-oldali service,
  • kliens-oldali webalkalmazás,
  • asztali szoftver,
  • mobilon futó alkalmazás,
  • serverless függvény,
  • adatbázis,
  • és így tovább!

A containerek ábrázolására szolgál a container diagram, melyből, hasonlóan a system context diagramhoz, csupán egy lesz: a teljes rendszer, felbontva containerekre.

Közösen: ChocoMarket Container Diagram

Szekció neve “Közösen: ChocoMarket Container Diagram”

Készítsünk C4 Container diagramot a ChocoMarket esettanulmányhoz!

Vegyük észre, hogy míg a System Context diagram elkészíthető volt csupán az SRS alapján (átvéve a felhasználókat, felhasználói csoportokat, valamint a külső függőségeket), addig a Container diagram elkészítéséhez már architekturális döntéseket kell hoznunk.

Azaz, a Container diagram elkészítésével párhuzamosan érdemes ADR-eket is írnunk, melyeket aztán referálhatunk is a diagramban.

A ChocoMarket Container diagramjához releváns architekturális döntések:

  • Hibrid architekturális stílus.
  • EDA a katalógusok betöltéséhez, modular monolith a katalógusok kiszolgálásához.
  • Egyetlen adatbázis az összes adat tárolásához.
  • A beolvasott csokoládék adatbázisba írása egyetlen writer service-en keresztül.
  • Különálló frontendek az eltérő felhasználói csoportoknak.

Készítsünk C4 Container diagramot az esettanulmányunkhoz!

Bővítsük a már meglevő LikeC4 formátumú C4 System Context diagramot egy C4 Container diagram nézettel (view).

A diagramnak változatlanul a csoport GitHub tárolójában kell helyet foglalnia, az alábbi módon:

  • Könyvtáradr
    • 01-architecture-style.md
  • ac.md
  • as.md
  • asr.md
  • diagram.likec4
  • esettanulmany.md
  • README.md
  • srs.doc

A fontosabb döntéseket dokumentáljuk ADR-ek formájában!