Mieliśmy okazję porozmawiać z Kamilem o bardzo ciekawym zagadnieniu, jakim jest dokumentacja architektury systemu. Jak to zrobić tak, aby zawrzeć wszystkie potrzebne informacje i nie przeładować jej szczegółami? Kamil przedstawił podejście do dokumentowania architektury zwane „C4”. Nazwa bierze się z tego, że odbywa się ono na 4 poziomach: Context, Containers, Components, Classes. Podejście „C4” zostało zaprezentowane również na jednym z pierwszych spotkań w ramach CSD+, gdy poszukiwaliśmy łatwiejszych sposobów na przedstawianie architektury systemów. Potrzeba nowego rozwiązania była wynikiem doświadczeń ze spotkań koncepcyjnych z Klientami. Niestety nie wszyscy rozumieją notację UML, co powodowało problemy w ustaleniu kluczowych informacji. „C4” jest uproszczonym sposobem pokazania architektury, gdzie dzielimy wszystko na 4 diagramy:
- Context – ogólny kontekst, w jakim będzie pracował system: główni aktorzy/role, inne systemy, główne procesy
- Containers – wysokopoziomowe decyzje, „domki” dla komponentów, wysokopoziomowa komunikacja, informacja dla developerów o tym, gdzie należy wykonać pracę
- Components – logicznie spójne części funkcjonalności (np. serwisy), działanie systemu na poziomie przepływu pomiędzy komponentami
- Classes – struktury dla klas, architektura aplikacji (porządkowanie kodu źródłowego)
Ważne jest także, że w podejściu „C4” na każdym poziomie inaczej podchodzimy do aspektów:
- Cel – w jakim celu powstaje ten diagram, co powinien przedstawiać
- Struktura – z jakich bloków składa się diagram
- Motywacja – co chcemy przekazać odbiorcom dokumentu oraz jakie odkrycia możemy poczynić podczas jego tworzenia
- Odbiorcy – kim są odbiorcy i czego mogą potrzebować na danym poziomie szczegółowości
W ramach C4 używamy prostych, często samodefiniujących się diagramów i jednej, określonej notacji. Wdrażając metodykę C4 korzystamy z tego samego zestawu abstrakcji i tej samej notacji na każdym poziomie szczegółowości, w komunikacji z każdym możliwym odbiorcą. Podejście C4 zapewnia nam spójne „skalowanie informacji” bez luk semantycznych. Dzięki temu możemy weryfikować architekturę – w sensie aktualnej jej zbieżności z wymaganiami i kontekstem. Weryfikację ułatwia możliwość płynnego skalowania uwagi od ogółu do szczegółu, co pozwala stopniowo zapoznawać się z kontekstem. Przykład wykorzystania C4 znajduje się w naszym Wiki GitLab pod adresem: https://git.inf.nekken.loc/nekken-public/c4-demo