Structurizr инструкция для начинающих

от автора

Хочу поделиться с вами инструкцией как описывать архитектуру системы как код. Формирование диаграмм будет в нотации С4, о самой нотации можно почитать по ссылке.

Применять будем инструмент Structurizr. Не будем рассматривать, как ввести инструмент в контур вашего ландшафта, задача показать, что именно необходимо сделать архитектору для описания текущего и будущего состояния системы.

Обеспечение рабочего места архитектора

  • Установить Java 17+

  • Установить idea (я использую vs code)

  • Установить плагин C4 DSL Extension 

  • Скачать structurizr-lite.war (источник)

Создать репозиторий и добавить в него ветку dev, в нём будем хранить нашу архитектуру 🙂 Теперь всё готов, перейдём к заполнению проекта.

Заполняем файл workspace.dsl

Скрытый текст
workspace {     name "наименование системы"      description "описание системы, понятноен психечески здоровым людям"     model {         # Подключаем ландшафт - справочник систем         !include landscape.dsl          # Подключаем контекстную диаграмму         !include context.dsl         # Подключаем контейнерную диаграмму         !include container.dsl     }     views {         # подключаем стили         !include styles.dsl          systemContext SRTUCTURIZR {             title "Контекст на сейчас"             include *             # авто форматирование, есть разные настройки, можно посмотреть в документации             autoLayout lr             exclude relationship.tag!=ASIS         }         systemContext SRTUCTURIZR {             title "Контекст на 2025"             include *             # autoLayout lr             exclude relationship.tag!=Q25         }         container SRTUCTURIZR {             title "Контейнеры"             include *             autoLayout lr             # exclude relationship.tag!=Q25          }     } }

Заполняем файл context.dsl

Скрытый текст
# Можно для наглядности добавить пользователя Architector = person "Архитектор"  softwareSystem SRTUCTURIZR { # Системный контекст на сейчас Architector -> SPARXEA "Ведение архитектуры" "Ручной ввод" "ASIS" SPARXEA -> SRTUCTURIZR "Выгрузка данных по системам ит ландшафта" "Ручной ввод" "ASIS,sync" # Системный контекст на 2025 год Architector -> SRTUCTURIZR "Ведение архитектуры" "Архитектура как код" "ASIS,Q25" SRTUCTURIZR -> SPARXEA "выгрузка результатов" "dsl" "Q25" }

Заполняем файл container.dsl

Скрытый текст
!element SRTUCTURIZR {     webapp = container "Веб приложение" {     }     database = container "База данных" {     } } # Можно добавить связи webapp -> database "save" "API" "ASIS

Заполняем файл landscape.dsl

Скрытый текст
# Справочник систем SRTUCTURIZR = softwareSystem  "Structurizr" "Система для ведения архитектуры как кода"  SPARXEA = softwareSystem "SPARX EA" "Позволяет вести описания и проектирования систем"

Заполняем файл styles.dsl

Скрытый текст
styles {             element "Element" {                 background #1168bd                 color #ffffff                 shape RoundedBox             }             element "Person" {                 background #1168bd                 color #ffffff                 shape person             }             relationship "sync" {                 color #000000                 dashed false             }             element "Container" {                 color #ffffff                 shape Pipe             }    } 

Далее необходимо запустить проект с помощью команды через командную строку (можно сделать некий *.cmd), код указан ниже

Скрытый текст
 java "-Djdk.util.jar.enableMultiRelease=false" -jar C:\structurizr-lite\structurizr-lite.war "C:\Users\.git\structurizr"

где

"-Djdk.util.jar.enableMultiRelease=false" # атрибут манифеста «Multi-Release» https://habr.com/ru/companies/haulmont/articles/428868/  "-jar C:\structurizr-lite\structurizr-lite.war" # указывается источник structurizr "C:\Users\.git\structurizr" # указываем локальный репозиторий 

После запуска перейти в браузер, и обратиться к http://localhost:8080

Описание сформировалось и отображается

Скрытый текст

Для наглядности в указанном примере есть 2 варианта отображения, первый вариант сформирован системой, за это отвечает строка кода:

autoLayout lr

В документации указаны разные варианты, можно поэкспериментировать 🙂

Вносим свои данные по контексту системы, контейнерам системы, можно поиграться стилями (в документации всё подробно изложено), пушим в репозиторий, профит. Теперь архитектура в виде кода.

Очень прошу соблюдать правила нотации С4 и при необходимости обращаться к документации. Гибрид в виде картинки, дело хорошее, но не всегда всем понятное

Если подход получит одобрение в рамках компании, то необходимо будет собирать архитектуру систем, и публиковать в structurizr. С этим поможет Structurizr CLI (https://docs.structurizr.com/cli). По факту необходимо 3 ключа и url

-id: The workspace ID (required) -key: The workspace API key (required) -secret: The workspace API secret (required) -url: The Structurizr API URL (optional; defaults to https://api.structurizr.com)

Надеюсь вы как минимум попробуйте данный подход, и для себя сами решите, полезен он вам или нет.

Материалы

https://docs.structurizr.com/ — сайт с документацией

https://github.com/structurizr/onpremises/releases — здесь можно скачать последнюю версию structurizr

https://gitflic.ru/project/trifonov‑ks/structurizr — пример проекта на всякий случай

Всем добра!


ссылка на оригинал статьи https://habr.com/ru/articles/855434/