Что такое C4 Model?

Ответ

C4 Model — это методология для визуализации и документирования архитектуры программного обеспечения через четыре уровня детализации (абстракции). Она помогает обсуждать систему с разными аудиториями — от бизнес-заказчиков до разработчиков.

Четыре уровня модели C4:

  1. Контекст (System Context): Высокоуровневая диаграмма, показывающая систему в целом, её взаимодействие с пользователями и другими внешними системами.
  2. Контейнеры (Containers): Диаграмма, раскрывающая, из каких крупных исполняемых блоков (веб-приложение, мобильное приложение, база данных, микросервис) состоит система и как они взаимодействуют.
  3. Компоненты (Components): Диаграмма, детализирующая ключевые модули или компоненты внутри одного контейнера и связи между ними.
  4. Код (Code): Детальная диаграмма (например, UML), показывающая конкретные классы, интерфейсы и их отношения внутри компонента. Этот уровень используется реже и обычно генерируется автоматически.

Пример для интернет-магазина:

  • Контекст: Покупатель взаимодействует с системой «Интернет-магазин», которая, в свою очередь, использует внешний «Платежный шлюз».
  • Контейнеры: Веб-приложение (Frontend), API-сервис (Backend), База данных PostgreSQL, Кэш Redis.
  • Компоненты (внутри API-сервиса): OrderService, PaymentProcessor, UserRepository.

Преимущества подхода:

  • Простота и ясность: Каждая диаграмма фокусируется на конкретных вопросах.
  • Масштабируемость: Позволяет «зумировать» от общей картины к деталям реализации.
  • Универсальный язык: Облегчает коммуникацию между разработчиками, архитекторами и заинтересованными лицами.

Ответ 18+ 🔞

Давай разберём эту вашу C4 Model, а то звучит как какой-то шифр для шпионов. На самом деле, идея-то проще пареной репы, если отбросить всю эту заумь.

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

Суть в четырёх слоях, как в матрёшке:

  1. Контекст (Context) — «Что это вообще за зверь?» Это самая большая и простая матрёшка. На картинке — один большой квадрат «Наш Крутой Магазин». К нему стрелочкой тыкается «Покупатель», а от него стрелочка улетает в сторону «Платёжный шлюз Сбера». Всё. Бабушка смотрит и понимает: «Ага, система, люди и какие-то другие штуки снаружи». Волнение ебать — ноль, всё ясно.

  2. Контейнеры (Containers) — «А из каких частей он собран?» Теперь расковыриваем ту большую матрёшку. Внутри оказывается не мешочек с горохом, а несколько поменьше: «Веб-морда на React», «Бэкенд-сервис на Java», «База данных PostgreSQL» и, например, «Кэш Redis для корзин». Видно, как они между собой общаются. Техлид уже кивает: «Понял, архитектура, стэк». А заказчик пока может идти пить чай.

  3. Компоненты (Components) — «А что там внутри этого бэкенда?» Берём матрёшку «Бэкенд-сервис» и тоже её открываем. А там уже мелкие, но важные детальки: OrderService (оформляет заказы), PaymentProcessor (дёргает тот самый Сбер), UserRepository (ковыряется в базе). Это уровень для разработчиков, которые начинают подозрение ебать чувствовать, если видят какую-то хитрую жопу в логике. Тут уже видно, кто с кем говорит и за что отвечает.

  4. Код (Code) — «Ну-ка, покажи мне эти самые классы!» Самая маленькая матрёшка, которую часто даже вручную не рисуют. Это когда ты лезешь внутрь OrderService и рисуешь диаграмму классов: вот OrderController, вот OrderEntity, вот OrderDTO. Чисто техническая хуйня для самых дотошных обсуждений. Чаще это генерируется автоматически из кода, чтобы не ебушки-воробушки каждый раз руками рисовать.

Зачем этот цирк? А затем, что это пиздец как удобно! Не нужно одной пиздопроебибной диаграммой на десять тысяч элементов пытаться осчастливить всех. Каждый получает свою картинку по уму:

  • Менеджеру — контекст.
  • Архитектору — контейнеры.
  • Тимлиду/разработчику — компоненты.
  • Самому себе, когда забыл, как там в коде завязано — код (но это необязательно).

Все говорят на одном языке, все понимают, с какого ракурса сейчас смотрят на систему. И никакого хуя с горы в виде непонимания между отделами. В общем, штука полезная, хоть и назвали как какой-то взрывчатый материал.