#моделирование

#диаграммы

#архитектура

C4 Model (Simon Brown)

C4 Model — это визуальный язык описания архитектуры программных систем, предложенный Саймоном Брауном.

Он появился как замена перегруженным UML-диаграммам: идея — описывать систему через контекст и связь между уровнями, а не через избыточные детали.

C4 = Context → Containers → Components → Code

Уровень 1. Context (Контекст)

Показывает систему «снаружи»: кто взаимодействует с ней и зачем.

Цель: дать общее понимание — что это за система и кто с ней работает.

  • Люди (actors, пользователи, роли)

  • Внешние системы и интеграции

  • Главная программная система

Контекстная диаграмма отвечает на вопрос:

«Как система вписывается в экосистему организации?»

Уровень 2. Containers (Контейнеры)

Показывает внутреннюю структуру системы — из каких контейнеров (модулей) она состоит и как они взаимодействуют.

Pasted image 20240515094748.pngКонтейнер ≠ Docker, это логическая единица развертывания:

отдельный процесс, сервис или приложение, которое можно запустить независимо.

Примеры контейнеров:

  • Веб-приложение (Spring MVC, Django, .NET API)

  • Мобильное приложение

  • Сервис очередей (Kafka, RabbitMQ)

  • База данных

  • Скрипт или отдельный микросервис

Для бэкенда контейнер может физически соответствовать Docker-контейнеру, но по смыслу — это логическая единица выполнения кода.

Уровень 3. Components (Компоненты)

Показывает структуру одного контейнера — какие компоненты (части) его составляют и как они связаны.

Pasted image 20240515094900.pngКомпонент — группа связанных функций или классов, реализующих конкретную ответственность.

На практике:

  • один компонент = 1 DLL / 1 JAR

  • не является единицей развертывания

  • отражает модуль внутри контейнера

Компоненты помогают разработчику и аналитику видеть, как логика разделена внутри контейнера.

Уровень 4. Code (Код)

Показывает внутреннюю реализацию компонента — классы, интерфейсы, таблицы БД и связи между ними.

Как правило, генерируется автоматически IDE или инструментами анализа зависимостей.

Принципы моделирования C4

  • Каждый уровень — детализация предыдущего, а не отдельная диаграмма.

  • Диаграммы должны быть понятны не только разработчикам, но и бизнесу.

  • Используй простые формы и подписи, без UML-нотации.

  • Показывай только то, что важно для понимания архитектуры.

  • Добавляй технологические детали только там, где это помогает.

Практические инструменты

  • Structurizr (официальный инструмент от Саймона Брауна)

  • PlantUML (!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml)

  • Draw.io, Lucidchart, Obsidian Excalidraw — для ручного визуального моделирования

Когда использовать

C4 используется для:

  • проектирования архитектуры новых систем;

  • описания текущей архитектуры (as-is);

  • подготовки документации и презентаций для бизнеса и IT;

  • визуализации границ ответственности между командами и сервисами.

Цель C4 — не красивая картинка, а понятная архитектура.

Последнее обновление