Skip to content

Educentr/arch-as-code-template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Arch as a code

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

  1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  2. Get started
  3. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ structurizr
  4. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ structurizr
  5. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° рСпозитория
  6. ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ
  7. ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с git
  8. Π Π°Π±ΠΎΡ‚Π° со structurizr-lite

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ для описания Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ architecture as a code. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π³ΠΈΠ±ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΌΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π°ΠΌΠΈ ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ измСнСния ΠΏΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ. ОписаниС Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ΄Π° освобоТдаСт ΠΎΡ‚ Π½ΡƒΠΆΠ΄Ρ‹ "Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ схСмы" ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΡƒΡ€ΠΎΠ²Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π‘4 ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹

git clone https://github.com/Nikolo/arch-as-code-template arch-as-code
cd arch-as-code
make init ARGS="-n MyCompanyName"
make ss_group ARGS="-n Widget"
make ss_group ARGS="-n Backoffice"
make ss_group ARGS="-n Core"
git remote rename origin origin-template
git remote add origin git@......
git add .
git commit -m'Initial project'
git push origin
git checkout -b TASK-123_MyNewProject
make proj ARGS='-s backoffice_fetcher'
#edit files
make run
# open 127.0.0.1:8080 in browser
# check results
git add .
git commit -m'My new project purpose'
git push origin TASK123-MyNewProject
# create merge or pull request for review

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ structurizr

Structurizr - это инструмСнт для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ докумСнтирования Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, основанный Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ Π‘4. Π’ качСствС языка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ собствСнный DSL structurizr, ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ докумСнтация

3. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ structurizr

МодСль Π΄Π°Π½Π½Ρ‹Ρ…

Workspace (Рабочая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ)

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ workspace Π½Π° всС пространство. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ описываСтся ΠΎΠ±Ρ‰ΠΈΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΉ Π»Π°Π½Π΄ΡˆΠ°Ρ„Ρ‚ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.

Person (Акторы)

ΠŸΠ΅Ρ€ΡΠΎΠ½Π° прСдставляСт собой ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ систСмы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΡ‚Π΅Ρ€ΠΎΠ², Ρ€ΠΎΠ»ΠΈ, пСрсоны ΠΈ Ρ‚.Π΄.).

SoftwareSystem (ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ систСмы)

Software System - это самый высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ приносит ΠΏΠΎΠ»ΡŒΠ·Ρƒ (value) своим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ ΠΎΠ½ΠΈ людьми ΠΈΠ»ΠΈ Π½Π΅Ρ‚. ΠžΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ систСмы (Software System), ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅, Π½ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ систСмы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… зависит ваша программная систСма (ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚).

Π­Ρ‚ΠΎ систСма ограничСнная ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ:

  • Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ людСй (ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ)
  • ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ (Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½/ΠΈΠ³Ρ€Ρ‹/мСссСндТСр/...) ΠΈΠ»ΠΈ тСхнологичСским стСком (мобильная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°/WEB/...)
  • особСнностями производствСнного процСсса

Group (Π“Ρ€ΡƒΠΏΠΏΡ‹)

Для удобства Software system ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сгруппированы, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Ρ… Π»Π΅Π³ΠΊΠΎ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Π»Π°ΡΡŒ Π·ΠΎΠ½Π° отвСтствСнности ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ.

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²Ρ‹Π·ΠΎΠ²Π°:

make ss_group ARGS='-n GROUP_NAME'

Container

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π½Π΅ΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Под Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму ΠΈΠ»ΠΈ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚.Π΄.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ принято:

  • Π”Π°Π²Π°Ρ‚ΡŒ понятноС Π½Π°Π·Π²Π°Π½ΠΈΠ΅;
  • Π£ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ список ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ для Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ ПО Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π²Π΅Ρ€ΡΠΈΡŽ языка ΠΈ основного Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°. Для Π‘Π£Π‘Π” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π‘Π£Π‘Π” ΠΈ Π΅Ρ‘ Π²Π΅Ρ€ΡΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Postgres 13;
  • НСобходимо Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ.

Бвязи ΠΌΠ΅ΠΆΠ΄Ρƒ элСмСнтами

Бвязи ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ элСмСнта-потрСбитСля _rel.dsl ΠΈ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°ΠΏΠΊΠ°Ρ… rel Π² описании ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²

Π‘Ρ…Π΅ΠΌΡ‹ ΠΈ прСдставлСния

Π’ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ 3 уровня прСдставлСний ΠΈ прСдставлСния ΠΏΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

System Landscape diagram

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° уровня 0, описываСт вСсь Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΉ Π»Π°Π½Π΄ΡˆΠ°Ρ„Ρ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ

System Context diagram

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° уровня 1. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° контСкста ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для бизнСс-ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Π² тСхничСскиС Π½ΡŽΠ°Π½ΡΡ‹. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ контСкста систСм ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° вопросы:

  • ΠšΠ°ΠΊΡƒΡŽ систСму ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ?
  • ΠšΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ систСму?
  • Как ΠΎΠ½Π° вписываСтся Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ срСду? Основной фокус Π½Π° этом ΡƒΡ€ΠΎΠ²Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π° Π°ΠΊΡ‚ΠΎΡ€Π°Ρ… ΠΈ Π½Π° систСмах, Π° Π½Π΅ Π½Π° тСхнологиях, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°Ρ… ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… дСталях.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ систСм позволяСт:

  • Π£Π²ΠΈΠ΄Π΅Ρ‚ΡŒ какая систСма добавляСтся Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ срСду;
  • Π‘Π΅Π· опасСний нСпонимания ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌ с мСньшим ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ тСхничСского погруТСния;
  • ΠŸΠΎΠ½ΡΡ‚ΡŒ, с ΠΊΠ΅ΠΌ Π²Π°ΠΌ вСроятно Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ ΠΎ мСТсистСмных взаимодСйствиях.

Container diagram

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° 2 уровня, описываСт состав ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ SoftwareSystem (ΠΈΠ· ΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² состоит) ΠΈ ΠΏΡ€ΠΈ описании ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ прилоТСния Π±Π΅Π· Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ погруТСния Π² Ρ‚Π΅Ρ…Π½ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ. Π­Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ полСзная ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ абстракция ΠΏΡ€ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ систСмы.

Π¦Π΅Π»ΠΈ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ – ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ вопросы:

  • КакиС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ систСма?
  • Из ΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² состоит систСма?
  • Как ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ собой?
  • Как ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽ с внСшними систСмами?
  • Как ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ систСмой?

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° рСпозитория

ΠšΠΎΡ€Π½Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ» рСпозитория workspace.dsl, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово !import Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ строится общая модСль описания Π½Π° основании Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΉ структуры Ρ„Π°ΠΉΠ»ΠΎΠ². Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ состоит ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»ΠΈ (model) ΠΈ прСдставлСний (views) ΠΈ стилСй (styles)

workspace "Project architect landscape" "The architectural landscape of project" {
    model {
        !include model/person.dsl
        !include model/software_system_group.dsl
        !include model/relationship.dsl
    }

    views {
        !include views
        !include style/styles.dsl
    }
}

МодСль содСрТит описаниС систСм (software system), ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ систСм (container) Бвязи ΠΌΠ΅ΠΆΠ΄Ρƒ элСмСнтами ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… dsl Ρ„Π°ΠΉΠ»Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ иСрархичСски Ρ‡Π΅Ρ€Π΅Π· include послС описания ΠΌΠΎΠ΄Π΅Π»ΠΈ самих элСмСнтов. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибки, Ρ‡Ρ‚ΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… описания связСй сам элСмСнт Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π» объявлСн Π’ прСдставлСниях сущСствуСт :

  • ΠžΠ±Ρ‰ΠΈΠ΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ System landscape ΠΈ System context ΠΏΠΎΠ΄ систСмы ΠΈ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ Π·Π°Π΄Π°Ρ‡Π°ΠΌ/ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ (views Π½Π° context ΠΈ container)
  • Π€Π°ΠΉΠ» со стилями styles.dsl содСрТит описаниС внСшнСго прСдставлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° схСмах.

Для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ структуры ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ

make init ARGS='-n COMPANY_NAME'

ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ

МодСль (model)

ΠŸΡ€Π°Π²ΠΈΠ»Π° наимСнования

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ $_{name} - Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ для создаваСмой сущности.

  • group_{name} - group
  • s_{name} - softwareSystem
  • c_{name} - container
  • p_{name} - person

Person

ΠžΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² /model/person.dsl

p_b2b_customer = person "B2B Customer" {
    tags "TASK-123, SuperFeature"
}

Из Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ тэги ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π°ΠΊΡ‚ΠΎΡ€Ρ‹. НовыС тэги Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π½Π°Ρ‡Π°Π»ΠΎ списка Ρ‚Π΅Π³ΠΎΠ².

Group

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ систСм ΡƒΠΆΠ΅ Π·Π°Π²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ /model/software_system_group.dsl

Software system

БистСмы ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π³Ρ€ΡƒΠΏΠΏ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ /model/software_system_group/{group_name}/software_system/{software_system_name}.dsl

s_super_feature = softwaresystem "Super feature service" {
    tags "Context: System" 
    tags "TASK-123, SuperFeature"
    // описаниС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²
}

Из Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ тэг стиля (всС значСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π΅ styles.dsl) ΠΈ тэги ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ систСмы. НовыС тэги Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π½Π°Ρ‡Π°Π»ΠΎ списка.

Container

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… систСм (Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Π΅, Ρ‡Ρ‚ΠΎ ΠΈ систСма)

s_mysoftware = softwaresystem "My software" {
    tags "Context: System" "My software"

    c_mysoftware_api = container "Mysoftware API" {
        technology "Java"
        tags "Container: Backend Service", "Mysoftware"
    }

    c_mysoftware_pgsql_db = container "Mysoftware DB" {
        technology "PostgreSQL"
        tags "Container: Database" "Mysoftware"
    }

    c_mysoftware_redis = container "Mysoftware Redis" {
        technology "Redis"
        tags "Container: Database" "Mysoftware"
    }
}

Из Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ тэг стиля (всС значСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π΅ styles.dsl) ΠΈ тэги ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. НовыС тэги Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π½Π°Ρ‡Π°Π»ΠΎ списка.

Бвязи

ΠžΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… систСм ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… описания связСй Π½ΡƒΠΆΠ½ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ связи для систСм ΠΈ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π­Ρ‚ΠΎ сдСлано осознанно для упрощСния Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Ρ…. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

  • Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ»ΠΈ описания Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… процСссов описываСтся логичСская связь ΠΌΠ΅ΠΆΠ΄Ρƒ систСмами (связь SoftwareSystem -> SoftwareSystem), которая ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ помСчаСтся тэгом Relation: SoftwareSystem
  • Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ уточнСния процСссов описываСтся логичСская связь ΠΌΠ΅ΠΆΠ΄Ρƒ систСмами ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ (связи SoftwareSystem -> Container ΠΈΠ»ΠΈ Container -> SoftwareSystem) , которая ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ помСчаСтся тэгом Relation: Container
  • Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ уточнСния процСссов описываСтся логичСская ΠΈΠ»ΠΈ физичСская связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ (связи Container -> Container) , которая ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ помСчаСтся тэгом Relation: Container Бвязи Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈ отобраТСния Π½Π° всСх Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Ρ….

Бвязи ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ систСмы/ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° потрСбитСля ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ самой систСмы ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ совпадаСт с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ систСмы {softwareSystemName}_rel.dsl сами Ρ„Π°ΠΉΠ»Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΏΠ°ΠΏΠΊΠ° /software_system/{systemName}/rel

s_mysoftware -> s_newsoftware "" "gRPC" {
    tags "Relation: Synchronous, Relation: SoftwareSystem"
    tags "TASK-123, SuperFeature"
}

s_mysoftware -> c_newsoftware_api "GetThings" "gRPC" {
    tags "Relation: Synchronous, Relation: Container"
    tags "TASK-123, SuperFeature"
}

Из Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΊΡ€ΠΎΠΌΠ΅ тэга ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ связи (синхронный ΠΈΠ»ΠΈ асинхронный ΠΏΠΎΡ‚ΠΎΠΊ) ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ тэг стиля (всС значСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π΅ styles.dsl) ΠΈ тэги ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ систСмы/ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. НовыС тэги Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π½Π°Ρ‡Π°Π»ΠΎ списка.

ВзаимодСйствия Ρ‡Π΅Ρ€Π΅Π· kafka

Π”ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ систСм ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· kafka ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ:

  • На ΡƒΡ€ΠΎΠ²Π½Π΅ software system указываСтся асинхронноС взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ систСмами (тэг Relation: Asynchronous), элСмСнт kafka ΠΊΠ°ΠΊ softwareSystem Π½Π΅ отобраТаСтся
  • На ΡƒΡ€ΠΎΠ²Π½Π΅ container отраТаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ container kafka Π²Π½ΡƒΡ‚Ρ€ΠΈ систСмы-consumer-a, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ систСмой источником (producer), ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ Π² систСмС источникС. Π’Π½ΡƒΡ‚Ρ€ΠΈ систСмы-consumer взаимодСйствиС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° kafka с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ/ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ consumer-Π°ΠΌΠΈ

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ (views)

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ€Π°Π·Π΄Π΅Π»Π° /views

ΠžΠ±Ρ‰ΠΈΠ΅ прСдставлСния

System Landscape

Π£ΠΆΠ΅ описано Π² system_landscape.dsl, модификация Π½Π΅ трСбуСтся

systemlandscape "SystemLandscape" {
    include *
    exclude "relationship.tag==Relation: Container"
    autoLayout
}
System Context

Для Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ схСм ΠΏΠΎ систСмам ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ описаниС Π² system_context.dsl ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ прСдставлСния == Π½Π°Π·Π²Π°Π½ΠΈΠ΅ SoftwareSystem

systemContext s_mysoftware "s_mysoftware" {
    include *
    exclude "relationship.tag==Relation: Container"
    autoLayout
}

Π§Π΅Ρ€Π΅Π· exclude ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΈΠ· прСдставлСния связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ

Container

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² container.dsl

container s_mysoftware "My_Software_Container" {
    include *
    autoLayout
    exclude "relationship.tag==Relation: SoftwareSystem"
}

Π§Π΅Ρ€Π΅Π· exclude ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΈΠ· прСдставлСния связи ΠΌΠ΅ΠΆΠ΄Ρƒ систСмами

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ располоТСны Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ /views/PROJ/{Project-folder}, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΊΠΎΡ€Π½Π΅ ΠΏΠ°ΠΏΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° содСрТит Ρ„Π°ΠΉΠ» .dsl с прСдставлСниями ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ ΠΈ ΠΏΠ°ΠΏΠΊΡƒ .sequences с Π½Π°Π±ΠΎΡ€ΠΎΠΌ plantuml Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ с описаниСм sequence Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ. Π€Π°ΠΉΠ» .dsl с прСдставлСниями трСбуСтся Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ согласно ΠΊΠΎΠ΄Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°/Π·Π°Π΄Π°Ρ‡ΠΈ Π² jira.

Π’Π°ΠΊ ΠΊΠ°ΠΊ основным Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ являСтся расстановка тэгов Π½Π° всСх элСмСнтах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Ρ‚ΠΎ описаниС схСмы ΠΏΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ строится ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ (для тэга TASK-XXX): Π—Π° основу для Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ выбираСтся систСма {softwareSystemName}, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅

Π‘ΠΊΡ€ΠΈΠΏΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт автоматичСски ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ запускаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

make proj ARGS='-p "TASK-XXX_Business_name" -s softwareSystemName'

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ (ΠΈΠ· шаблона template/proj.tmpl):

systemContext {softwareSystemName} "TASK-XXX_ctx" {
    include "element.tag==TASK-XXX"
    exclude "relationship.tag==Relation: Container"
    exclude "relationship.tag!=TASK-XXX"
    autoLayout
}

container {softwareSystemName} "TASK-XXX" {
    include element.type==person
    include element.type==container
    exclude "element.tag!=TASK-XXX"
    include element.type==softwaresystem
    exclude "element.tag!=TASK-XXX"
    exclude "relationship.tag!=TASK-XXX"
    autoLayout
}

Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ structurizr on premise Ρ‚ΠΎ Π² Π²Π΅Π±-интСрфСйсС structurizr ΠΏΡ€ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° систСмС откроСтся Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ список со всСми ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΌΠΈ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, Π² Ρ‚.Ρ‡. ΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ.

НапримСр, для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Task-123:

systemContext s_super_feature "TASK-123_Super_Feature_ctx" {
    include "element.tag==TASK-123"
    exclude "relationship.tag==Relation: Container"
    autoLayout
}

container s_super_feature "TASK-123_Super_Feature_ctx" {
    include element.type==person
    include element.type==container
    exclude "element.tag!=TASK-123"
    include element.type==softwaresystem
    exclude "element.tag!=TASK-123"
    exclude "relationship.tag!=TASK-123"
    autoLayout
}

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ autoLayout ΠΈ Ρ€Π°ΡΡΡ‚Π°Π²ΠΈΡ‚ΡŒ локально (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ structurizr lite) элСмСнты Π±ΠΎΠ»Π΅Π΅ спСцифичСски, Π½ΠΎ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ всС Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠΊΠ° Ρ…Ρ€Π°Π½ΠΈΠΌ с ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ autoLayout

ЦвСтовая диффСрСнциация ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Ρ…

Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ для Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Ρ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ groovy скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° основании Ρ‚Π΅Π³ΠΎΠ² добавляСт стили ΠΊ элСмСнтам ΠΈ связям. Π’Π΅Π³ для раскраски задаётся ΠΈΠΌΠ΅Π½Π΅ΠΌ Π²Π΅Ρ‚ΠΊΠΈ Π² git. Для всС элСмСнтов ΠΈ связСй Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… присутствуСт Ρ‚Π΅Π³ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ‚Π΅Π³Π° ΠΈΠ· названия Π²Π΅Ρ‚ΠΊΠΈ ΠΈ это:

  • СдинствСнный ΠΈΠ»ΠΈ послСдний Ρ‚Π΅Π³ Π² спискС Ρ‚Π΅Π³ΠΎΠ² - добавляСтся Ρ‚Π΅Π³ "NEW"
  • Π½Π΅ СдинствСнный ΠΈ Π½Π΅ послСдний Π² спискС Ρ‚Π΅Π³ΠΎΠ² - добавляСтся Ρ‚Π΅Π³ "MOD"

Π’Π΅Π³ΠΈ "NEW" ΠΈ "MOD" содСрТат оформлСния ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π΄Π»Π― автоматичСского выставлСния Ρ‚Π΅Π³ΠΎΠ² являСтся:

  • элСмСнты Ρ‚ΠΈΠΏΠ° Person
  • элСмСнты Ρ‚ΠΈΠΏΠ° Component
  • присутствиС Ρ‚Π΅Π³Π° "NOT_MODIFIED" Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ‚Π΅Π³ΠΎΠΌ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² случаС ΠΊΠΎΠ³Π΄Π° элСмСнт Π² этом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½ΠΎ Π½Π΅ модифицировался ΠΈ Π½Π΅ добавлялся).

Π’Π°ΠΆΠ½ΠΎ!

  • ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π²Π΅Ρ‚ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ structurizr-lite.
  • ΠŸΡ€ΠΈ запускС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ env с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ‚Π΅Π³Π° для раскраски (дСлаСтся автоматичСски ΠΏΡ€ΠΈ make run)

ОписаниС Architecture Decision Records (ADR)

Structurizr позволяСт Π² интСрфСйсС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π² Π²ΠΈΠ΄Π΅ списка. Π’ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ прСдлагаСтся ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡ‚ΡŒ ADR Π² Π²ΠΈΠ΄Π΅ markdown Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°ΠΏΠΊΠ΅ adrs. ΠŸΡ€Π°Π²ΠΈΠ»Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

  • ADR вСдутся ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ основныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ приняты ΠΏΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²
  • НазваниС Ρ„Π°ΠΉΠ»Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ xxxx-adr-name Π³Π΄Π΅ xxxx - порядковоС число ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ
  • Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ описываСт Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ADR
  • ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ указываСтся Status (Бтатус) ΠΏΠΎ adr, для принятых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ указываСтся Accepted
  • Context (ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚) ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π’ Π½Π΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ описаны Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы.
  • Decision (РСшСниС) Π’ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ описываСтся обоснованиС Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹Π»ΠΎ принято ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π’ Π½Π΅ΠΌ большС внимания удСляСтся "ΠΏΠΎΡ‡Π΅ΠΌΡƒ", Π° Π½Π΅ "ΠΊΠ°ΠΊ". РСшСниС Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π½Π°Π±ΠΎΡ€ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ², Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ послСдствия принятия этой Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹.
  • Consequences (ΠŸΠΎΡΠ»Π΅Π΄ΡΡ‚Π²ΠΈΡ) УказываСтся ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ, Ρ€Π°Π·Π΄Π΅Π» послСдствий содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΠ±Ρ‰Π΅ΠΌ воздСйствии Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΅ΡΡ‚ΡŒ компромиссы ΠΈ ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ. Π’Π°ΠΊΠΆΠ΅ Ссли Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли описываСтся Π²Π΅Ρ€Ρ…Π½Π΅-уровнСвая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ тСхнологиям ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌ для взаимодСйствия Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… систСм).

Structurizr Ρ‚Π°ΠΊΠΆΠ΅ позволяСт вСсти ADR ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΈΡ… Π² Π²Π΅Π± интСрфСйсС Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Decisions Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ SoftwareSystem ΠΈ Containers

ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с git

ИмСнованиС Π²Π΅Ρ‚ΠΎΠΊ

НазваниС Π²Π΅Ρ‚ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Π½ΠΎΠΌΠ΅Ρ€Π° таска ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ дСлаСтся ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ "TASK-123_SuperFeature"

Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π° основании ΠΈΠΌΠ΅Π½ΠΈ Π²Π΅Ρ‚ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ раскраска ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

Π Π°Π±ΠΎΡ‚Π° со structurizr-lite

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ запуск structurizr-lite производится ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ make run.

Π’Π°ΠΆΠ½ΠΎ! ΠŸΡ€ΠΈ запускС анализируСтся тСкущая Π²Π΅Ρ‚ΠΊΠ° Π² git ΠΈ Π½Π° основании Π΅Ρ‘ названия производится раскраска элСмСнтов. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π²Π΅Ρ‚ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ structurizr-lite!

About

Template for create arch-as-code repo for your company

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published