Architecture as Code: моделируем архитектуру предприятия в ArchiMate
Меня зовут Максим Рогоза, и последние 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 <>
где:
#Layer
— определяет слой архитектуры (#Business
,#Application
или#Technology
) и его цветовое оформление«Label»
— текст, который будет отображен на диаграммеID
— идентификатор элемента для создания связей<
— тип элемента в нотации ArchiMate (например,> <
,> <
)>
Например:
archimate #Business "Order Processing" as BP1 <>
archimate #Business "Order Creation" as BS1 <>
Связи между элементами создаются по шаблону:
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 #Business "Order Processing" as BP1 <>
archimate #Business "Order Creation" as BS1 <>
archimate #Application "Order Service" as AS1 <>
archimate #Application "Order Management System" as AC1 <>
' Определяем связи между элементами
Rel_Serving_Up(AS1, BS1)
Rel_Realization_Up(AC1, AS1)
Rel_Realization_Up(BS1, BP1)
@enduml
На выходе получаем вот такую схему:

Ну, а теперь попробуем что‑нибудь посложнее:
@startuml
!include
' Определяем действующих лиц
archimate #Motivation "Программист" as devStake <>
archimate #Business "Программист" as dev <>
archimate #Business "Продавец" as seller <>
' Бизнес-процессы и сервисы
archimate #Business "Покупка пива" as buyBeer <>
archimate #Business "Выбор пива" as chooseBeer <>
archimate #Business "Оплата" as payment <>
archimate #Business "Продажа алкоголя" as sellService <>
' Приложения и технологии
archimate #Application "Кассовый аппарат" as pos <>
archimate #Technology "Платежный терминал" as terminal <>
archimate #Technology "Холодильник с пивом" as fridge <>
' Мотивация
archimate #Motivation "Жажда" as thirst <>
archimate #Motivation "Усталость после кодинга" as tired <>
' Связи
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:
25 февраля. «ArchiMate и PlantUML: автоматизация архитектурного моделирования с помощью ИИ». Подробнее
5 марта: «Совместная работа и реализация артефактов в Archi». Подробнее
20 марта: «Риcуем модель ArchiMate в бесплатном инструменте Archi». Подробнее