Co je model C4?
Čtyři úrovně přiblížení jednoho systému, každá odpovídá na otázku, kterou položila ta nad ní - a záměrně žádná vlastní notace, právě proto se dobře přenáší mezi týmy.
7 min čteníC4 model1 z 3
Krátká odpověď
- C4 jsou čtyři úrovně přiblížení jednoho systému - kontext, kontejnery, komponenty, kód - a každá úroveň existuje proto, aby odpověděla na jednu otázku, kterou položila ta nad ní.
- Je to konvence, ne notace. C4 říká, co na diagram patří, a tvary nechává na vás - proto se dá kreslit v UML, v ArchiMate i v boxech a šipkách.
- Kontejner je nasaditelná nebo spustitelná věc - aplikace, služba, databáze - ne Docker kontejner. Je to úroveň, ze které má většina týmů největší užitek, a zároveň ta nejčastěji vynechávaná.
- Úroveň 4 se ručně kreslit obvykle nevyplatí. Pokud chcete třídy, vygenerujte je z kódu, kde už pravdivé jsou.
01Čtyři otázky, v pořadí#
Model C4 je soubor čtyř diagramů nad jedním systémem, každý bližší pohled než ten předchozí. Jeho skutečným přínosem není kreslení - je to pořadí. Každá úroveň odpovídá na otázku a ta odpověď otevře otázku, kvůli které existuje úroveň další.
| Prvek | Notace | Co znamená |
|---|---|---|
| 1. Kontext systému | Jeden box a k němu lidé a sousedé | Jeden box pro váš systém, obklopený lidmi a ostatními systémy, se kterými komunikuje. Žádné vnitřnosti. Diagram, který přečte nováček i sponzor. |
| 2. Kontejnery | Boxy uvnitř hranice systému | Ten jeden box, otevřený. Samostatně nasaditelné nebo spustitelné věci - webová aplikace, API, databáze, broker - a volání mezi nimi. |
| 3. Komponenty | Boxy uvnitř jednoho kontejneru | Jeden kontejner, otevřený. Hlavní strukturní části v něm a jejich závislosti. Vyplatí se nakreslit, když je kontejner dost velký na to, aby se o něm dalo dohadovat. |
| 4. Kód | Třídy | Třídy uvnitř jedné komponenty, což je UML diagram tříd. Vygenerujte ho, nebo vynechte; kreslit tuhle úroveň ručně je nejrychlejší cesta k zastaralému diagramu. |
Jak klesáte, publikum se zužuje. Úroveň 1 je pro kohokoli, koho systém zajímá, včetně lidí, kteří nikdy nepřečtou kód. Úroveň 4 je pro tým, v týdnu, kdy něco přestavuje. Ten spád je argumentem pro to, abyste nakreslili první dvě a zastavili se, dokud někdo nepožádá o víc.
02C4 je konvence, ne notace#
Právě tohle se ztrácí. C4 nedefinuje tvary, styly čar ani sémantiku vztahů. Říká vám, co patří na který diagram a pro koho je, a pak dodá: nakreslete to tak, jak váš tým kreslí věci tak jako tak.
Praktickým důsledkem je, že C4 se skládá s notací, kterou už máte, místo aby ji nahrazoval. Diagram kontejnerů nakreslený UML komponentami je zároveň legálním UML diagramem i správným C4 diagramem. Nakreslený v ArchiMate se tentýž obsah mapuje na aplikační komponenty a technologické uzly. Obojí je v pořádku. V pořádku není diagram, jehož boxy znamenají tři různé věci, protože nikdo neřekl, o kterou úroveň jde.
Protože tu není notace ke kontrole, disciplína musí přijít odjinud: označte každý box tím, co je, označte každou čáru tím, co dělá a jakým protokolem, a nikdy nemíchejte dvě úrovně na jednom plátně. Ta tři pravidla udělají většinu práce, kterou by za vás jinak udělala specifikace.
03Problémem je slovo kontejner#
C4 vznikl před nadvládou Dockeru a používá slovo kontejner v jeho starším, obecném významu: věc, která musí běžet, aby systém fungoval, a která se dá nasadit samostatně. Jednostránková aplikace je kontejner. Stejně tak databáze, serverless funkce, message broker a mobilní aplikace.
Úroveň 2 je tam, kde je většina hodnoty, a je to ta úroveň, kterou týmy vynechávají - zčásti kvůli názvu a zčásti proto, že je to první diagram, který si vynutí skutečné rozhodnutí o tom, čím systém vlastně je. Článek o diagramu kontejnerů jeden takový prochází od začátku do konce.
04Jak ho používat, aby nezastaral#
Sada C4 diagramů má stejný způsob selhání jako každá jiná architektonická dokumentace: v den nakreslení je přesná a za půl roku tiše špatná. Pomáhají dvě věci a ani jedna není o kreslení.
První je držet úrovně v jednom modelu, ne ve čtyřech nesouvisejících obrázcích. Pokud je API na vašem kontextovém diagramu a API na diagramu kontejnerů tentýž prvek, přejmenování je jedna úprava; pokud jsou to dva boxy, které náhodou sdílejí popisek, přejmenování jsou dvě úpravy a na jednu se zapomene. To je argument pro model za pohledy a je to tentýž argument, který zeširoka rozvádí udržování modelu aktuálním.
Druhá je kreslit méně úrovní. Kontextový diagram a diagram kontejnerů, které jsou pravdivé, jsou lepší než čtyři úrovně, z nichž dvě jsou fikce. Zejména úroveň 4 by se měla generovat z kódu, nebo vynechat - ručně kreslený diagram tříd je snímek názoru a kompilátor má aktuálnější.
Po jednom řádku na každé
- 01Čtyři úrovně, čtyři otázky: kdo to používá, jaké jsou díly, co je uvnitř dílu, jaké jsou třídy.
- 02C4 definuje obsah, ne notaci - kreslete ho tedy v UML, v ArchiMate nebo v obyčejných boxech, a buďte konzistentní.
- 03Kontejner je cokoli samostatně nasaditelného nebo spustitelného. S Dockerem to nemá nic společného.
- 04Kreslete úrovně 1 a 2, přidejte 3 tam, kde je potřeba rozhodnout spor, a 4 vygenerujte nebo vynechte.
05Časté dotazy#
Co znamená zkratka C4?
Context, Containers, Components a Code - čtyři úrovně detailu, od celého systému v jeho prostředí až po třídy uvnitř jedné komponenty. Ten název je obsah knihy.
Je C4 náhradou za UML?
Ne, a ani alternativou k němu. C4 říká, které čtyři diagramy kreslit a co na který patří; UML dává notaci s definovanou sémantikou. Skládají se: C4 diagram kontejnerů nakreslený notací UML komponent je legální UML diagram i správný C4 diagram.
Co je v C4 kontejner?
Něco, co musí běžet, aby systém fungoval, a co lze nasadit samostatně - webová aplikace, mobilní aplikace, API, databáze, message broker. Není to Docker kontejner a právě tato shoda názvů je nejčastějším zdrojem zmatku okolo modelu.
Musím nakreslit všechny čtyři úrovně?
Ne. Většina týmů nakreslí úrovně 1 a 2 a skončí. Úroveň 3 se vyplatí u kontejneru natolik složitého, že se o jeho vnitřku vedou spory, a úroveň 4 téměř nikdy - kód je už popisem kódu.
V této sérii
- 01Co je C4?
- 02Diagram kontejnerů
- 03C4 vs UML
Související články
Diagramy struktury
Praxe modelování
Diagramy struktury
Základy
Praxe modelování