Визуализация архитектуры (C4 + PlantUML)



Одна из основных проблем в визуализации — это что каждый разработчик по разному себе ее представляет. Кто-то считает одни детали важными, кто-то другие. В итоге это приводит к набору разностортных картинок, которые проблематично склеить вместе (либо к супер перегруженным диаграммам)



C4 — это модель представления архитектуры в виде четырех слоев:



1. Диаграмма контекста: взаимодействие системы с пользователем, с другими системами



2. Диаграмма контейнеров: как в рамках системы взаимодействуют контейнеры (единицы, которые независимо деплоятся). Например, взаимодействие микросов



3. Диаграмма компонентов: как в рамках контейнера взаимодействуют его отдельные части. Например, модули в рамках микроса



4. Диаграмма кода: как в рамках компонента написан код. Обычно это просто диаграмма классов



Такая модель позволяет очертить уровень детализации в каждом слое, и дать общее понимание, что мы хотим видеть в конкретной диаграмме. А визуализировать это можно с помощью обычных UML-диаграмм



При этом существует PUML (PlantUML) — инструмент описания UML с помощью текста. Конкретно для C4 существует "плагин", который позволяет удобно описывать диаграмму в терминах C4



Базовый пример:

@startuml

!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml



Person(user, "User")

System(system, "Marketplace")



Rel(user, system, "Make order")

@enduml




Попробовать отрисовать его можно тут