Модель С4 позволяет построить совместную работу в команде, путем выделения единого "языка" общения. Это не единственный способ описания архитектуры проекта, существуют другие варианты, например UML.
Преимущества:
- гибкость, за счет того, что это не готовая архитектура, а набор правил и подходов;
- возможность работать на разных уровнях построения архитектуры;
- единый язык для работы в команде;
- может совмещаться с конечными архитектурами, например с "чистой архитектурой"
В основе любой системы лежит потребитель, потребителем может быть как человек (пользователь), так и другая система. Особенностью С4 является разделение архитектуры на четыре уровня, на самом верху размещается потребитель.
Уровни, которые часто используются:
- уровень системы;
- уровень приложения;
- уровень кода;
Деление на уровни С4:
- Контекст;
- Система;
- Контейнер;
- Компонент;
Функциональные требования лежат на уровне системы, а нефункциональные требования могут быть на уровнях контейнера и компонент.
В рамках каждого уровня строятся "диаграммы". Диаграмму можно назвать "архитектурным представлением", диаграмма - это рассмотрение одного конкретного вопроса с разных стороны в рамках каждого уровня. Вопросы, которые должны быть рассмотрены определяются на уровне функциональных требований.
Стандартные диаграммы (обязательные):
- Системная диаграмма;
- Контейнерная диаграмма;
- Компонентная диаграмма;
- Диаграмма кода
Необязательные диаграммы:
- Landscape диаграмма (архитектурный ландшафт)
- Динамичная диаграмма (порядок выполняемых действий)
- Диаграмма развертывания
Диаграмма строится в контексте определенных требований, их может быть несколько для каждого уровня диаграмм.
Обязательные атрибуты диаграммы:
- Название
- Уровень
- Легенда
- Акронимы и аббревиатуры
Элементы - это геометрические формы и их окраска. В рамках С4 внутри элементов указывается уровнь, описание и имя.
Отношения указываются стрелочками, пунктирная линия для "слабых" связей, а сплошная для "сильных" связей. Стрелки должны быть дополнены текстовым названием используемого отношения.
В качестве примера спроектируем систему донатов, которая включает в себя следующую функциональность: