Меня зовут Максим Рогоза, и последние 7 лет я работаю корпоративным архитектором в крупнейших компаниях России. В настоящее время я занимаюсь стратегическим IT‑консалтингом в компании Аксеникс, где помогаю крупным организациям выстраивать эффективную IT‑архитектуру. В рамках своей деятельности я часто помогаю компаниям внедрять методологии управления архитектурой предприятия, и ArchiMate зарекомендовал себя как один из наиболее эффективных инструментов для описания и анализа корпоративной архитектуры.
Помимо консалтинга, я преподаю курс по ArchiMate в Otus, и одним из частых вопросов от студентов является возможность описания архитектуры предприятия с помощью кода. Недавно на одном из своих проектов я решил опробовать подход Architecture as Code, и сегодня хочу поделиться полученным опытом.
Преимущества подхода
Architecture as Code предлагает существенные преимущества по сравнению с традиционным подходом к моделированию архитектуры. После освоения синтаксиса скорость создания моделей значительно возрастает — вместо перетаскивания элементов мышкой достаточно описать их взаимосвязи в текстовом виде. Внесение изменений становится намного проще, так как не нужно искать нужный элемент на диаграмме и перестраивать связи, достаточно отредактировать соответствующий фрагмент кода.
Важным преимуществом является возможность использования искусственного интеллекта для помощи в создании моделей. Современные LLM‑модели хорошо понимают текстовые описания архитектуры и могут генерировать корректный код для их визуализации. Кроме того, сгенерированные диаграммы можно легко интегрировать в различные инструменты документирования, такие как Draw.io, Confluence и другие системы, что значительно упрощает поддержку актуальной документации.
Инструменты и синтаксис
Основным инструментом для реализации подхода Architecture as Code я выбрал PlantUML с расширением Archimate. Для быстрого начала работы удобно использовать онлайн‑редактор.
Синтаксис PlantUML для ArchiMate достаточно прост и интуитивен. Каждый элемент архитектуры описывается по следующему шаблону:
archimate #Layer "Label" as ID <<stereotype>>
где:
-
#Layer — определяет слой архитектуры (#Business, #Application или #Technology) и его цветовое оформление
-
«Label» — текст, который будет отображен на диаграмме
-
ID — идентификатор элемента для создания связей
-
<<stereotype>> — тип элемента в нотации ArchiMate (например, <<business‑process>>, <<application‑component>>)
Например:
archimate #Business "Order Processing" as BP1 <<business-process>>
archimate #Business "Order Creation" as BS1 <<business-service>>
Связи между элементами создаются по шаблону:
Rel_RelationType_Direction(ElementID1, ElementID2)
где:
-
RelationType — тип связи (Serving, Realization, Assignment, Access и др.)
-
Direction — направление стрелки (Up, Down, Left, Right или пусто для двунаправленной связи)
-
ElementID1 — идентификатор элемента‑источника
-
ElementID2 — идентификатор элемента‑приемника
Например:
Rel_Serving_Up(AS1, BS1) ' Элемент AS1 обслуживает элемент BS1
Rel_Realization_Up(AC1, AS1) ' Элемент AC1 реализует элемент AS
Пример использования
Рассмотрим простой пример описания бизнес‑процесса обработки заказа:
@startuml
' Подключаем библиотеку ArchiMate
!include <archimate/Archimate>
' Определяем элементы архитектуры
archimate #Business "Order Processing" as BP1 <<business-process>>
archimate #Business "Order Creation" as BS1 <<business-service>>
archimate #Application "Order Service" as AS1 <<application-service>>
archimate #Application "Order Management System" as AC1 <<application-component>>
' Определяем связи между элементами
Rel_Serving_Up(AS1, BS1)
Rel_Realization_Up(AC1, AS1)
Rel_Realization_Up(BS1, BP1)
@enduml
На выходе получаем вот такую схему:

Ну а теперь попробуем что‑нибудь посложнее:
@startuml
!include <archimate/Archimate>
' Определяем действующих лиц
archimate #Motivation "Программист" as devStake <<stakeholder>>
archimate #Business "Программист" as dev <<business-actor>>
archimate #Business "Продавец" as seller <<business-actor>>
' Бизнес-процессы и сервисы
archimate #Business "Покупка пива" as buyBeer <<business-process>>
archimate #Business "Выбор пива" as chooseBeer <<business-process>>
archimate #Business "Оплата" as payment <<business-process>>
archimate #Business "Продажа алкоголя" as sellService <<business-service>>
' Приложения и технологии
archimate #Application "Кассовый аппарат" as pos <<application-component>>
archimate #Technology "Платежный терминал" as terminal <<technology-device>>
archimate #Technology "Холодильник с пивом" as fridge <<technology-device>>
' Мотивация
archimate #Motivation "Жажда" as thirst <<driver>>
archimate #Motivation "Усталость после кодинга" as tired <<driver>>
' Связи
Rel_Association_Down(devStake, thirst)
Rel_Association_Down(devStake, tired)
Rel_Triggering_Down(thirst, buyBeer)
Rel_Triggering_Down(tired, buyBeer)
Rel_Assignment_Down(dev, buyBeer)
Rel_Assignment(seller, sellService)
Rel_Triggering_Right(chooseBeer, payment)
Rel_Serving_Up(fridge, chooseBeer)
Rel_Serving_Up(terminal, payment)
Rel_Serving_Up(pos, sellService)
Rel_Realization_Up(chooseBeer, buyBeer)
Rel_Realization_Up(payment, buyBeer)
Rel_Serving_Up(sellService, buyBeer)
Rel_Realization_Up(dev, devStake)
@enduml
и получаем вот такую схему:

Использование ИИ для генерации моделей
Современные языковые модели можно эффективно использовать для создания архитектурных диаграмм. Достаточно описать желаемую модель на естественном языке, например:
«Создай диаграмму в нотации ArchiMate, показывающую взаимодействие системы управления заказами с внешними сервисами, включая платежную систему и систему доставки.»
Искусственный интеллект способен сгенерировать соответствующий PlantUML‑код, который затем можно доработать под конкретные нужды.
Недостатки подхода
При всех преимуществах, у Architecture as Code есть и свои ограничения:
-
Требуется время на освоение синтаксиса
-
Сложнее контролировать визуальное расположение элементов
-
Не все нотации ArchiMate поддерживаются в PlantUML
-
При большом количестве элементов код может стать трудночитаемым
Заключение
Architecture as Code — это мощный подход к моделированию архитектуры предприятия, который особенно эффективен при работе с системами контроля версий и в условиях частых изменений. Несмотря на определенные ограничения, преимущества этого метода делают его отличным выбором для современных архитектурных практик, особенно в сочетании с возможностями искусственного интеллекта.
В завершение рекомендую всем желающим посетить открытые уроки по Archimate, которые проведут мои коллеги в Otus:
Автор: MaxRokatansky