Comments 9
Недавно открыл для себя mermaid как доступный способ кодом "рисовать" диаграммы. Поддерживаются различные виды, в том числе в бете поддреживаются С4 диаграммы. Автоматически рендерится в схемы на гитлабе, обсидиане. В вскод тоже работает, как минимум с установкой расширения (точно не помню). Т.е. можно без каких-либо отдельных инструментов вести ту же документацию сразу в гит-репозиториях в маркдауне и при этом не надо тащить картинками схемы - все изменения будут фиксироваться, как и изменения другого текста.
В Visio нет наборов элементов для рисования C4
Самое интересное начинается дальше, когда начинает появляется необходимость контроля версий, деление на слои, модули и их внутренние связи и согласованность
Тогда на помощь приходят системы для управления корпоративной архитектуры, такие как iserver и leanix и другие
Описание диаграмм кодом это пока очень грустно, так как autolayout пока что умеет работать с 4-5 квадратами и 8-10 стрелками. Когда их становится больше, а их всегда больше в реальных диаграммах реальных систем, то ты сначала вынужден тратить кучу времени на написание кода (это всегда дольше, чем в графическом редакторе из готового набора элементов drag'n'drop'ом вытянуть квадратик или стрелочку), а потом еще в 10 раз больше времени на то, чтобы потом все расставить так, чтобы это было хоть сколько-нибудь читаемо.
Также в вашем примере с GetDelivery на С2 и С3 все перемешалось в кучу. Поизучайте, что есть Container и что есть Component и как эти абстракции вкладываются друг в друга на диаграммах. Половина ваших компонент на уровне С3 это на самом деле контейнеры с уровня С2 (если не все вообще). Просто попробуйте запихнуть это в тот же structurizr, поймете о чем я?
Уровень C4 использую как Cases, особенно для обозначения слайсов и вообще динамики развития архитектуры.
В защиту PlantUML скажу, что регулярно выходят для него обновления. Я использую в связке с VSCode. Регулярно обновляю и пока проблем не замечал, даже с «весомыми» диаграммами??
Диаграмма контекста в примере с GetDelivery некорректна: база данных, очередь и балансировщик должны быть отдельными контейнерами. Впрочем, балансировщик автор нотации вообще рекомендует указывать на отдельной диаграмме развёртывания.
🔺 Container
Описывает верхнеуровневую архитектуру и технологии. Используется для понимания технологического стека и разделения зон ответственности.
Элементы:
- контейнеры (например, веб-приложения, базы данных),
У вас пример в GetDelivery почему-то БД помещена на уровень компонентов, в то время как в других диаграммах она на уровне контейнеров. Примеры из интернета тоже помещают БД на уровень контейнеров. Да и ваши слова намекают на то, что БД должны быть на уровне контейнеров.
Почему тогда GetDelivery не содержит БД на уровне контейнеров?
Нотация моделирования архитектуры С4 — примеры диаграмм и инструменты