Архитектура в формате C4
Я не перестаю удивляться энтузиазму, мастерству и целеустремленности архитекторов, с которым они предлагают свои подходы к моделированию информационных систем. Например, модель C4 которую представил Саймон Браун (Simon Brown). Саймон автор книги Software Architecture for Developers и сайта coding{the}architecture. В принципе, слайды и материалы с сайта достаточно полно описывают идеи автора. Но для тех, кому будет лениво их просматривать, я изложу краткую версию, немного дополнив её своими комментариями.
Итак, простые архитектурные эскизы могут быть не менее полезны, чем строгие модели, выполненные в той или иной нотации, например в нотации UML. Автор предлагает использовать четырехуровневый набор абстракций и соответствующие им четыре вида диаграмм: классы, компоненты, контейнеры и контекст (classes, components, containers, context).
Контекстная диаграмма описывает систему на самом высоком уровне. Её цель заключается в том, чтоб показать окружение системы: пользователей (действующие лица, роли) и другие информационные системы, с которыми осуществляется взаимодействие. Эта модель в первую очередь предназначена для людей, не обладающих специальной подготовкой в ИТ. Она чем-то похожа на UML use case diagram, т.к. содержит акторов и обсуждаемую систему (System Under discussion). Однако контекстная диаграмма не содержит этих смешных овальчиков, которыми обычно отрисовывают сами use case-ы. Вместо них варианты использования пишутся непосредственно на стрелках между действующим лицом и системой.
Диаграмма контейнеров напоминает мне UML deployment diagram, разработанную программистом. На ней присутствуют узлы и некоторые компоненты, но набор этих элементов ограничен. Вы не увидите на ней сетевых элементов, балансировщиков нагрузки и прочих инфраструктурных деталей. Рисуются только те узлы, которые задействованы для развертывания компонент (веб-сервера, сервера приложений, файловые ресурсы, СУБД). Эта схема скорее показывает набор необходимых приложению технологий, чем конкретную модель развертывания.
Компонентная диаграмма детализирует содержание контейнеров. Но отображаются на ней не компоненты в понимании UML, т.е. физически выделяемые элементы системы, а функциональные модули, сервисы в понимании SOA.
Ну и наконец, диаграмма классов представляет собой UML диаграмму классов. Для всех, кроме, быть может, самих разработчиков эта диаграмма является опциональной.