🟦 Нотация C4. Подборка материалов



С4 – простая нотация для описания архитектуры. Модель объединяет 4 иерархических уровня: Context, Container, Component, Code – отсюда и название.



1️⃣ Диаграммы контекста (Context) – показывают систему в масштабе ее взаимодействия с пользователями и другими системами. Детали здесь не важны, так как это уменьшенное изображение, показывающее общую картину системного ландшафта. В центре внимания не технологии, протоколы и другие низкоуровневые детали, а люди и системы. С диаграммой этого уровня могут работать “люди из бизнеса”.



2️⃣ Диаграммы контейнеров (Container) – показывают, как система разделена на отдельные контейнеры, которые работают в своих средах выполнения и взаимодействуют друг с другом и с внешним миром. Контейнеры могут быть приложениями, базами данных, файловыми системами, скриптами и другими элементами, необходимыми для работы системы. Диаграмма контейнеров помогает понять, какие технологии используются в системе, как она устроена и как она обслуживает пользователей и другие системы.



3️⃣ Диаграммы компонентов (Component) – показывает устройство контейнера. Здесь компонент – это группа связанных функций, объединённых четко определенным интерфейсом. Все компоненты не являются отдельно развертываемыми единицами и обычно выполняются внутри контейнера в одном и том же пространстве процесса. Целевая аудитория диаграмм уровня Component – разработчики и системные архитекторы.



4️⃣ Диаграммы кода (Code) – создаются по запросу и показывают низкоуровневую реализацию компонентов. Рекомендовано использовать UML Class diagram/Entity relationship diagram и генерировать эти диаграммы автоматически.

Пример используемых инструментов для уровня Code:

▫️ PlantUML – позволяет генерировать UML-диаграммы из текста;

▫️ C4Builder – обеспечивает экспорт в PDF и прочие форматы;

▫️ C4-PlantUML — плагин для IDEA.



Главные преимущества C4



Унифицированный способ рисовать архитектурные схемы. В отличие от “нотации” boxes and lines, когда каждый рисует, как хочет и непонятно что, модель C4 позволяет улучшить читаемость диаграмм благодаря формализации использования элементов и связей.



Нужная степень детализации. Модель позволяет выбрать нужный уровень детализации вместо того, чтобы попытаться запихнуть все системы и сервисы в одну схему. Это похоже на Google Maps, где можно увидеть целые страны, прежде чем опуститься до области, города и отдельного дома.



⛔️ Недостатки C4



Нотация не предъявляет строгих требований, поэтому диаграммы могут выглядеть по-разному в зависимости от автора. Для большего единообразия требуются дополнительные правила на уровне соглашения архитекторов.



Модель не даёт чётких критериев по выделению контейнеров и компонентов. Могут возникать споры, например, по поводу отнесения базы данных к уровню Context или к уровню Component.



Модель предполагает, что система может быть полностью описана четырьмя уровнями детализации, но это не всегда так. В зависимости от размера, сложности и характера системы, может потребоваться больше или меньше уровней, а также различные способы перехода между ними.



Модель не учитывает изменения в архитектуре во времени и не позволяет отображать различные варианты и сценарии.



📎 Материалы



🌐 Официальный сайт



📄 Статьи

1. Как описать архитектуру продукта по нотации C4 — теория (вариант 1)

2. Как описать большую систему в нотации С4 — теория (вариант 2)

3. Аналитик и архитектура: UML-диаграммы для модели C4 — статья от Babok School

4. Описание архитектуры системы с помощью C4 model — взгляд разработчика

5. Опыт составления HLD-документации по нотации C4



⏯️ Видео

1. Визуализация архитектуры C4 model / Максим Пальчиков

2. Архитектурный репозиторий на базе GitLab и C4 Model для большой компании. Кирилл Ветчинкин

3. C4 models as code — Simon Brown



🎓 Бесплатный курс



#проектирование #архитектура #подборка