Источник
Официальный сайт 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-диаграммы вручную без автообновления из исходников.
