Меня зовут Максим Рогоза, и последние 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:
