C4 Model (Simon Brown)
C4 Model — это визуальный язык описания архитектуры программных систем, предложенный Саймоном Брауном.
Он появился как замена перегруженным UML-диаграммам: идея — описывать систему через контекст и связь между уровнями, а не через избыточные детали.
C4 = Context → Containers → Components → Code
Уровень 1. Context (Контекст)
Показывает систему «снаружи»: кто взаимодействует с ней и зачем.
Цель: дать общее понимание — что это за система и кто с ней работает.
-
Люди (actors, пользователи, роли)
-
Внешние системы и интеграции
-
Главная программная система
Контекстная диаграмма отвечает на вопрос:
«Как система вписывается в экосистему организации?»
Уровень 2. Containers (Контейнеры)
Показывает внутреннюю структуру системы — из каких контейнеров (модулей) она состоит и как они взаимодействуют.
Контейнер ≠ Docker, это логическая единица развертывания:
отдельный процесс, сервис или приложение, которое можно запустить независимо.
Примеры контейнеров:
-
Веб-приложение (Spring MVC, Django, .NET API)
-
Мобильное приложение
-
Сервис очередей (Kafka, RabbitMQ)
-
База данных
-
Скрипт или отдельный микросервис
Для бэкенда контейнер может физически соответствовать Docker-контейнеру, но по смыслу — это логическая единица выполнения кода.
Уровень 3. Components (Компоненты)
Показывает структуру одного контейнера — какие компоненты (части) его составляют и как они связаны.
Компонент — группа связанных функций или классов, реализующих конкретную ответственность.
На практике:
-
один компонент = 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 — не красивая картинка, а понятная архитектура.