Подход является составной частью принципа "Архитектура как код", позволяя создавать несколько диаграмм архитектуры программного обеспечения из единой модели при помощи программных языков моделирования. Одной из таких моделей является C4 (Context Container Component Code). Данный пример реализован на двух программных языках моделирования: DSL Structurizr и PUML.
Модель С4 довольно трудно полноценно использовать для продумывания архитектуры системы. Особенно если мы говорим о архитектуре уровня ERP или, например, доработок типовых конфигураций. Существующие слои предлагается использовать в следующей интерпритации.
Слой, на котором отображается как система взаимодействует с пользователями и другими внешними системами. По умолчанию в системный контекст входят только пользователи и системы, которые непосредственно взаимодействуют с основной системой. Если нам нужно видеть системы и пользователей, которые влияют на систему опосредованно, можно использовать вид System Landscape (Системный ландшафт), в котором будут отображены все системы, описанные в модели. Описание кода L1
В рамках описания архитектуры системы на платформе 1С контейнерами предлагается считать подсистемы конфигурации. При наличии большого количества подсистем и отсутствия требований к описанию каждой подсистемы можно объединять их в блоки (например, все подсистемы БСП в одном контейнере). Описание кода L2
На слое компонентов детализируется состав объектов в подсистеме и описывается их взаимодействие. Компонентом является объект метаданных. Описание кода L3
Не используется, но можно на этом уровне сделать принципиальное описание структуры общих модулей или ER-диаграммы объектов из слоя компонентов.
В случае описания небольшой системы/подсистемы можно использовать Mermaid - инструмент для визуализации диаграмм, ренедринг которого поддерживается напрямую в GitHub. Синтаксис похож на PUML с некоторыми отличиями и ограничениями.
C4Context
title Example 1C C4 - System Context
Person(SystemUser1, "Пользователь-исполнитель")
Person(SystemUser2, "Пользователь-руководитель")
System(System1C, "Система на платформе 1С")
System(OtherSystem1, "Внешняя система 1")
System(OtherSystem2, "Внешняя система 2")
Rel(OtherSystem1, System1C, "Передача данных по НСИ", "AMQP")
Rel(System1C, OtherSystem2, "Передача остатков по складам", "HTTPS")
Rel_D(SystemUser2, System1C, "Смотрит отчеты")
Rel_U(SystemUser1, System1C, "Вводит данные")