C4 Model полезен тогда, когда команде нужно не просто нарисовать архитектуру, а объяснить одну и ту же систему разным людям без перегрузки деталями. Эта глава как раз про то, как держать несколько уровней приближения одновременно и не терять целостность рассказа по дороге от контекста к внутреннему устройству.
В ежедневной документации он хорош тем, что подсказывает диаграмму под аудиторию и под задачу: context для общей картины, container для рабочей архитектуры команды, component для выборочной глубины, deployment для связи с инфраструктурой. Не менее важен и разбор notation guidelines с типовыми ошибками, потому что именно там обычно ломается ясность.
На review и в архитектурных разговорах C4 удобен как спокойный, повторяемый способ вести собеседника по уровням абстракции. С его помощью легко показать границы системы, ключевые контейнеры и места, где нужен более глубокий разбор, не перегружая разговор деталями раньше времени.
Практическая польза главы
Уровни абстракции
Дает понятный способ раскладывать архитектуру от контекста до компонентов без перегрузки деталями.
Целевая аудитория
Помогает выбирать уровень диаграммы под конкретного читателя: бизнес, архитектор, разработчик, ops.
Консистентность модели
Учит поддерживать связность между уровнями, чтобы описание системы не противоречило само себе.
Interview structure
На интервью позволяет четко двигаться от high-level контекста к точечному deep dive.
Источник
Официальный сайт C4 Model
Ключевые принципы, уровни диаграмм, notation и примеры от Simon Brown.
C4 Model — developer-friendly подход, где архитектура раскладывается по уровням абстракции. Главная идея: показывать систему на нужном уровне приближения для конкретной аудитории, а не объяснять всё одной перегруженной схемой.
4 уровня C4
System Context
Одна система в окружении людей и внешних систем.
Аудитория: Техническая и нетехническая аудитория.
Рекомендация к использованию: Да, почти всегда.
Container
Приложения и хранилища внутри системы (web app, API, DB, queue, etc).
Аудитория: Архитекторы, разработчики, ops/support.
Рекомендация к использованию: Да, базовый уровень для команд.
Component
Компоненты внутри выбранного контейнера.
Аудитория: Архитекторы и разработчики.
Рекомендация к использованию: Опционально, если реально добавляет ценность.
Code
Кодовые элементы конкретного компонента (классы/интерфейсы/таблицы).
Аудитория: Разработчики.
Рекомендация к использованию: Скорее нет; лучше генерировать из tooling по запросу.
Примеры C4 диаграмм
Примеры в формате из UML-главы: выбирайте тип диаграммы и смотрите соответствующую визуализацию.
Context Example
Пользователь, внешние системы и одна целевая платформа на L1.
Детали
Diagrams
Рекомендации по core и supporting диаграммам.
Supporting диаграммы
System Landscape
Карта систем на уровне организации/домена.
Dynamic
Сценарий взаимодействий во времени для конкретного use case.
Deployment
Размещение контейнеров и систем по средам (prod/stage/dev).
Notation
Notation Guidelines
Практические правила описания элементов и связей.
Notation checklist
Именование
У каждого элемента есть имя и короткое описание.
Технологии
Для контейнеров и компонентов явно указывается технология.
Связи
Связи направленные, с подписью и понятным intent.
Протокол
Для межконтейнерных связей явно указывайте протокол/технологию.
Legend
Добавляйте legend/key, чтобы нотация была самодокументируемой.
Tool-agnostic
C4 не привязан к конкретному инструменту и стилю визуализации.
Практический workflow
Шаги C4 workflow
5 этапов от границ системы до runtime-представленияКонтекст
Начинайте с System Context, чтобы зафиксировать границы и внешние зависимости.
Контейнеры
Добавляйте Container диаграмму как основной рабочий слой архитектуры.
Компоненты
Компоненты рисуйте только для важных/сложных контейнеров.
Код
Code-уровень оставляйте для сложных мест и генерируйте из кода.
Runtime + Infra
Для сценариев и среды развертывания используйте Dynamic и Deployment.
Контекст
Начинайте с System Context, чтобы зафиксировать границы и внешние зависимости.
Контейнеры
Добавляйте Container диаграмму как основной рабочий слой архитектуры.
Компоненты
Компоненты рисуйте только для важных/сложных контейнеров.
Код
Code-уровень оставляйте для сложных мест и генерируйте из кода.
Runtime + Infra
Для сценариев и среды развертывания используйте Dynamic и Deployment.
Частые ошибки
Слишком глубокий старт
Сразу начинать с component/code без context/container.
Размытые связи
Подписывать связи общими словами вроде `uses` без конкретики.
Один плакат на всё
Пытаться показать всё на одной диаграмме и терять читаемость.
Ручная синхронизация L4
Хранить code-диаграммы вручную без автообновления из исходников.
Связанные главы
- Введение в архитектуру ПО - Дает базовые принципы, которые определяют, на каком уровне C4 и для какой аудитории строить диаграмму.
- UML - Показывает альтернативную нотацию и помогает сравнить, где C4 проще и практичнее для коммуникации.
- Стратегии декомпозиции - Границы сервисов и модулей из декомпозиции напрямую переходят в Container и Component уровни C4.
- BPMN - BPMN описывает ход процесса, а C4 — структуру системы; вместе они дают цельную архитектурную картину.
- ArchiMate - Дополняет C4 enterprise-перспективой и связывает бизнес, приложения и технологический слой.
