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

Хочу поделиться с вами инструкцией как описывать архитектуру системы как код. Формирование диаграмм будет в нотации С4, о самой нотации можно почитать по ссылке https://habr.com/ru/articles/778726/.

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

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

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

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

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

  • Скачать structurizr-lite.war (источник https://docs.structurizr.com/lite/installation)

Создать репозиторий и добавить в него ветку 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

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

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

3cb107ad04966052de359a50c29672e8.png

Для наглядности в указанном примере есть 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 — пример проекта на всякий случай

Всем добра!

© Habrahabr.ru