Модель C4: четыре уровня абстракции, которые наконец объясняют, зачем вообще рисовать архитектурные схемы

public

Автор: Listen IT · Listen IT


Видео Listen IT, 15 минут. C4 — архитектурная нотация, созданная Саймоном Брауном как ответ на две типичные проблемы: диаграммы, которые непонятны никому кроме их автора, и схемы, которые устаревают быстрее, чем успевают быть прочитанными.

Большинство архитектурных диаграмм страдают одним и тем же пороком: непонятно, для кого они нарисованы. Схема, адресованная топ-менеджменту, содержит детали реализации, интересные только разработчикам. Схема для разработчиков — слишком крупная, чтобы из неё понять что-то конкретное. C4 решает это через явную иерархию четырёх уровней: Context (система и её окружение для нетехнической аудитории), Container (приложения и базы данных, из которых состоит система), Component (модули внутри одного контейнера) и Code (диаграммы классов, нужны редко). Каждый уровень отвечает на разный вопрос и адресован разной аудитории — и это не абстрактная теория, а конкретный инструмент против диаграмм, которые не читает никто.

Кому смотреть: разработчикам и техлидам, которым нужно объяснять архитектуру коллегам с разным уровнем технической подготовки — и всем, кто хочет перестать рисовать схемы “для галочки”.

Из этого можно взять в работу: нарисуйте C4 Context-диаграмму вашей системы — один прямоугольник в центре, несколько снаружи. Если не можете объяснить за пять минут нетехническому коллеге, что происходит на этой схеме — схема не работает. C4 Context — именно для этой цели.


Уровень Context — самый высокий и самый полезный для начала. Здесь система показана как чёрный ящик в окружении пользователей и внешних систем, с которыми она взаимодействует. Никаких деталей реализации — только «кто и зачем использует систему» и «с чем система интегрирована». Этот уровень понятен CEO и работает как разговорная основа для всей остальной архитектурной документации.

Container-диаграмма раскрывает, из чего система состоит: веб-сервер, API, база данных, очередь сообщений, мобильное приложение. Каждый контейнер — это отдельно деплоящаяся единица. На этом уровне уже появляются технологические решения (Java, PostgreSQL, Redis), но нет деталей внутреннего устройства каждого контейнера.

Component-диаграмма нужна не всегда — только для тех контейнеров, внутреннее устройство которых важно задокументировать. Здесь видны модули, сервисы, репозитории — то, что разработчики видят в коде каждый день.

Code-уровень (UML-диаграммы классов) авторы C4 сами рекомендуют использовать только для самых критичных фрагментов, если вообще использовать: код меняется слишком быстро, и диаграммы мгновенно устаревают.

Инструменты: C4 не привязана к конкретному ПО. Structurizr — рекомендованный инструмент от Саймона Брауна, позволяет описывать архитектуру кодом и генерировать диаграммы автоматически. Это убирает главную проблему архитектурных диаграмм — ручное обновление при каждом изменении.