ΠœΡ€Π΅ΠΆΠΎΠ²Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄ / β€‹β€‹ΠœΡ€Π΅ΠΆΠΎΠ²Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄

ΠŸΡ€Π΅Π· послСднитС няколко Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ… Π΄Π° сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌ ΠΏΠΎΠ²Π΅Ρ‡Π΅ с докумСнтация. ΠŸΠΈΡΠ°Π½Π΅Ρ‚ΠΎ Π½Π° обяснитСлСн тСкст Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° систСма ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ доста просто. НачСртаванСто Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°, която Ρ‰Π΅ ΠΏΠΎΠΊΠ°Π·Π²Π° всички ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅Π·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, ΡΡŠΡ‰ΠΎ Π΅ доста лСсно.

Но Π½Π°ΠΉ-проблСмният аспСкт Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π·ΠΈ докумСнтация Π°ΠΊΡ‚ΡƒΠ°Π»Π½Π°. И Ρ‚Π΅ΠΊΡΡ‚ΡŠΡ‚ Π±ΠΈ Π±ΠΈΠ» Π½Π°Ρ€Π΅Π΄, Π½ΠΎ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈΡ‚Π΅... Π—Π°Ρ‰ΠΎΡ‚ΠΎ... цялата докумСнтация Π΅ ΠΎΠ½Π»Π°ΠΉΠ½, Ρ‚.Π΅. Π² html Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‚Π΅ΠΊΡΡ‚ΡŠΡ‚ Π΅ ΠΏΡ€ΠΈΠ΄Ρ€ΡƒΠΆΠ΅Π½ ΠΎΡ‚ gif/jpeg/png ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈΡ‚Π΅. А Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈΡ‚Π΅ сС чСртаят Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΊΠ°Ρ‚ΠΎ Visio ΠΈΠ»ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ услуги a la draw.io. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° СкспортиратС Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° Π² Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅Π½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ я ΠΏΡ€ΠΈΠΊΠ°Ρ‡Π²Π°Ρ‚Π΅ към html. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π΅.

Какъв Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚?

Π‘Ρ…Π΅ΠΌΠΈΡ‚Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ са прости. По-Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ слоТно. Π”Π°, броят Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Π΅ Π΄ΡƒΠ·ΠΈΠ½Π° ΠΈΠ»ΠΈ Π΄Π²Π΅, броят Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ ΡΡŠΡ‰ΠΈΡΡ‚. Плюс подписи, някои обозначСния. ΠŸΡ€ΠΎΡΡ‚ΠΈΡ‚Π΅ схСми ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ описани с Π΄ΡƒΠΌΠΈ, Π½ΠΎ ΠΏΡ€Π΅ΠΊΠ°Π»Π΅Π½ΠΎ слоТнитС, Ρ…ΠΌ... (Π²) β€žΠ½ΡΠΌΠ° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π°Ρ‚, ΡΡŠΡ€.β€œ Има ΠΌΠ½ΠΎΠ³ΠΎ схСми, трябва Π΄Π° сС правят ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² тях ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ, Π΅ΠΏΠΈΠ·ΠΎΠ΄ΠΈΡ‡Π½ΠΎ, Ρ‚.Π΅. постоянно, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‚Π΅ слСдват Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ html Π½Π° услугата. ΠžΠΏΠΈΡ‚Π²Π°Π»ΠΈ Π»ΠΈ стС Π³ΠΎ?

Π”Π°, Ρ€Π°Π·Π±ΠΈΡ€Π° сС. НапримСр, харСсвам Π³Ρ€Π°Ρ„ΠΈΠΊΠΈΡ‚Π΅ ΠΎΡ‚ gliffy.com. Но Π·Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, трябва Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° услуга Π½Π° Ρ‚Ρ€Π΅Ρ‚Π° страна ΠΈ Π΄Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Ρ‚Π΅ Ρ‚Π°ΠΌ. И Π΅ ΠΏΠΎ-Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° Π΄Π΅Π»Π΅Π³ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ Π½Π° ΠΊΠΎΠ»Π΅Π³Π°.

Какво Π΄Π° правя?

Наскоро ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ… Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π² Github Π² ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠΈΡ‚Π΅ github.com/RaoulMeyer/diagram-as-code. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄. Π’Π΅Π·ΠΈ. Π½ΠΈΠ΅ описвамС Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π°, ΠΎΡ‚ която сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ, Π² js. ПишСм Ρ‚ΠΎΠ·ΠΈ js Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² ΡΡŠΡ‰ΠΈΡ html, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π΅ Ρ‚Π΅ΠΊΡΡ‚ΡŠΡ‚ Π½Π° Π΄Ρ€ΡƒΠ³Π°Ρ‚Π° докумСнтация.

ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Π°Π· пиша докумСнтация Π½Π΅ изцяло Π² html. ОбикновСно докумСнтацията Π΅ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с тСкст Π·Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΉΡ‚ΠΎ слСд Ρ‚ΠΎΠ²Π° сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΎΠ½Π΅Π½ сайт ΠΎΡ‚ някакъв Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Wintersmith. Или ΡƒΠΈΠΊΠΈ систСма.

Оказва сС ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ: Π½ΠΈΠ΅ смС написали тСкста, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ сС отваря Ρ‚Π°Π³ΡŠΡ‚ Π½Π° скрипта ΠΈ Π² Π½Π΅Π³ΠΎ Π΅ описан JS ΠΊΠΎΠ΄ΡŠΡ‚ Π½Π° схСмата.

Какво Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄ ΠΏΠ°ΠΊ?

Π₯арСса ΠΌΠΈ Ρ‚ΠΎΠ²Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ СдинствСният ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΊΠΎΠΉΡ‚ΠΎ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° Π΅ Π½Π°Ρ‡Π΅Ρ€Ρ‚Π°Π½Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ тСкстово прСдставянС. (Π’ края Π½Π° статията Ρ‰Π΅ ΠΈΠΌΠ° Π²Ρ€ΡŠΠ·ΠΊΠΈ към ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΈ статии, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ… Π² Google Π² Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° Π½Π° Ρ‚Π΅ΠΌΠ°Ρ‚Π° ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄.)

И Π½Π΅ съм СдинствСният, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π° докумСнтацията. Понякога ΠΊΠΎΠ»Π΅Π³ΠΈΡ‚Π΅ ΡΡŠΡ‰ΠΎ допринасят - ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚ Π΄ΡƒΠΌΠ°, промСнят описаниС, Π²ΠΌΡŠΠΊΠ²Π°Ρ‚ Π½ΠΎΠ²ΠΈ снимки. 

Π—Π°Ρ‚ΠΎΠ²Π° Π±ΠΈΡ… искал Π΄Π° видя Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° Π² Ρ‡Π΅Ρ‚ΠΈΠΌ, Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ тСкстов Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ няма Π΄Π° изисква дълга ΠΊΡ€ΠΈΠ²Π° Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅. А Π½Π° някои мСста ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΡ€ΠΈ просто Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ ΠΈ поставитС, Π·Π° Π΄Π° ускоритС добавянСто Π½Π° Π½ΠΎΠ²Π° Π²Π΅Ρ€ΠΈΠ³Π°. 

И Π΄Ρ€ΡƒΠ³ ΠΊΠΎΠ»Π΅Π³Π° отбСляза, Ρ‡Π΅ ΠΊΠΎΠ΄ΡŠΡ‚, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π΅ Π΄ΠΎΠ±ΡŠΡ€, Π½ΠΎ Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ структура, всичко ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΌΠ½ΠΎΠ³ΠΎ строго ΠΈ ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅Π»Π½ΠΎ.

Π—Π°Ρ‚ΠΎΠ²Π° сС ΠΎΠΏΠΈΡ‚Π°Ρ… Π΄Π° си прСдставя Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΊΠ°Ρ‚ΠΎ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ няколко ΠΌΠ°Π»ΠΊΠΈ масива, ΠΊΠΎΠΈΡ‚ΠΎ описват възли, Π²Ρ€ΡŠΠ·ΠΊΠΈ, Π³Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ възли, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ мСстополоТСниСто Π½Π° Π²ΡŠΠ·Π»ΠΈΡ‚Π΅. Оказа сС, ΠΏΠΎ ΠΌΠΎΠ΅ скромно ΠΌΠ½Π΅Π½ΠΈΠ΅, доста ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π²ΠΊΡƒΡΡŠΡ‚ ΠΈ Ρ†Π²Π΅Ρ‚ΡŠΡ‚...

Как Π΅ Ρ‚ΠΎΠ²Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° Π² масив?

  • ВсСки възСл сС описва с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π° възСла.
  • ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΈΠΊΠΎΠ½Π° към възСла ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ надпис.
  • ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π²Π° възСла.
  • Π—Π° комуникация Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ цвят ΠΈ надпис.
  • ΠŸΠΎΡΠΎΠΊΠ°Ρ‚Π° Π½Π° комуникация сС опрСдСля ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° към Ρ†Π΅Π»Ρ‚Π°. А ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΡŠΡ‚ ΠΈ Ρ†Π΅Π»Ρ‚Π° са ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ Π½Π° възли.
  • Π•Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ възли ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ към Π³Ρ€ΡƒΠΏΠ°.
  • Π’Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° ΡΡŠΡ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС посочСна ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΡ‚ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°, Ρ‚Π°ΠΊΠ° ΠΈ към Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°.

Използвайки Ρ‚Π΅Π·ΠΈ прости ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ слСдната Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°. ΠŸΡ€ΠΎΡΡ‚ΠΎ? БъвсСм.

ΠœΡ€Π΅ΠΆΠΎΠ²Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄ / β€‹β€‹ΠœΡ€Π΅ΠΆΠΎΠ²Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄

И сС описва със слСдния js ΠΊΠΎΠ΄. ΠžΡΠ½ΠΎΠ²Π½ΠΎΡ‚ΠΎ Ρ‚ΡƒΠΊ Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΡŠΡ‚ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅. Π’ ΠΊΠΎΠΈ възли са посочСни - възли, Ρ€ΡŠΠ±ΠΎΠ²Π΅ - Π²Ρ€ΡŠΠ·ΠΊΠΈ.
 

  const elements = {
    nodes: [       // описываСм ΡƒΠ·Π»Ρ‹
      { id: 'client', type: 'smartphone', label: 'Mobile App'},
      { id: 'server', type: 'server', label: 'Main Server'},
      { id: 'db1', type: 'database', label: 'DB 1'},
      { id: 'db2', type: 'database', label: 'DB 2'},
    ],
    edges: [       // ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ связи
      { source: 'client', target: 'server', label: 'request' },
      { source: 'server', target: 'db1', label: 'request' },
      { source: 'server', target: 'db2', label: 'request' },
    ],
  };
  Diagram('scheme1', elements);

Π Π°Π·Π±ΠΈΡ€Π° сС, Π½Π΅ измислих сам Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠ° Π½Π° Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π°, Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° cytoscape.js Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΡ‰Π΅Π½ инструмСнт Π·Π° визуализация. Използвам само ΠΌΠ°Π»ΠΊΠ° част ΠΎΡ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π² ΠΌΠΎΠ΅Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. 

Π”ΠΎΠ±Ρ€Π΅, Ρ‚ΠΎΠ²Π° Π΅ прост ΠΏΡ€ΠΈΠΌΠ΅Ρ€. МоТС Π»ΠΈ Π΄Π° Π΅ ΠΏΠΎ-слоТно?

Π”Π° моля. Π—Π° посочванС Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Π·Π° посочванС Π½Π° Π³Ρ€ΡƒΠΏΠΈ посочвамС списък ΠΎΡ‚ Π³Ρ€ΡƒΠΏΠΈ Π² Π³Ρ€ΡƒΠΏΠΈ, Π° самитС Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΈΠΌΠ°Ρ‚ Π³Ρ€ΡƒΠΏΠΎΠ² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚.

ΠœΡ€Π΅ΠΆΠΎΠ²Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄ / β€‹β€‹ΠœΡ€Π΅ΠΆΠΎΠ²Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄

И Ρ‚ΠΎΠ²Π° Π΅ ΠΊΠΎΠ΄ΡŠΡ‚:

<div id="scheme5" style="height:500px;width:800px;"></div>
<script>
  const elements5 = {
    groups: [
      { id: 'g1', label: 'Π“Ρ€ΡƒΠΏΠΏΠ° сСрвисов 1'},
      { id: 'g2', label: 'Π“Ρ€ΡƒΠΏΠΏΠ° сСрвисов 2'},
    ],
    nodes: [
      { id: 'man1', type: 'person', label: 'Π§Π΅Π»ΠΎΠ²Π΅ΠΊ'},
      { id: 'client', type: 'smartphone', label: 'Π‘ΠΌΠ°Ρ€Ρ‚Ρ„ΠΎΠ½'},
      { id: 'agent-backend', type: 'server', group: 'g1', label: 'agent-backend'},
      { id: 'web', type: 'server', group: 'g1', label: 'ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ admin'},
      { id: 'www', type: 'server', group: 'g1', label: 'страница Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ'},
      { id: 'mongodb1', type: 'database', group: 'g1', label: 'Mongo DB 1'},
      { id: 'mongodb2', type: 'database', group: 'g1', label: 'Mongo DB 2'},
      { id: 'runner-integration1', type: 'worker', group: 'g1', label: 'ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ°'},
      { id: 'runner-integration2', type: 'worker', group: 'g1', label: 'ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ°'},
      { id: 'api', type: 'server', group: 'g1', label: 'API'},
      { id: 'server2', type: 'server', group:'g2', label: 'сСрвСр'},
      { id: 'otherServer', type: 'server', group:'g2', label: 'сСрвСр'},
      { id: 'firebase', type: 'cloud', label: 'Google Firebase'},
    ],
    edges: [
      { source: 'client', target: 'agent-backend', label: 'json', color: 'red' },
      { source: 'agent-backend', target: 'mongodb1', color: 'red' },
      { source: 'agent-backend', target: 'mongodb2',  color: 'red' },
      { source: 'mongodb1', target: 'runner-integration1', label: 'Π΄Π°Π½Π½Ρ‹Π΅' },
      { source: 'mongodb2', target: 'runner-integration2', label: 'Π΄Π°Π½Π½Ρ‹Π΅' },
      { source: 'mongodb1', target: 'web', label: 'Π΄Π°Π½Π½Ρ‹Π΅ для отобраТСния' },
      { source: 'runner-integration1', target: 'server2', label: 'Π΄Π°Π½Π½Ρ‹Π΅' },
      { source: 'runner-integration2', target: 'otherServer', label: 'Π΄Π°Π½Π½Ρ‹Π΅' },
      { source: 'api', target: 'firebase', label: 'запросы', color: 'blue', },
      { source: 'firebase', target: 'client', label: 'push', color: 'blue'},
      { source: 'server2', target: 'api', label: 'увСдомлСния', color: 'blue'},
      { source: 'man1', target: 'client', },
    ],
    positions: [
      { id: 'client', row: 2, col: 1,},
      { id: 'agent-backend', row: 2, col: 3,},
      { id: 'web', row: 6, col: 3,},
      { id: 'www', row: 1, col: 3,},
      { id: 'mongodb1', row: 1, col: 4,},
      { id: 'mongodb2', row: 2, col: 5,},
      { id: 'runner-integration1', row: 3, col: 3,},
      { id: 'runner-integration2', row: 4, col: 3,},
      { id: 'api', row: 5, col: 3,},
      { id: 'server2', row: 6, col: 7,},
      { id: 'otherServer', row: 4, col: 7,},
      { id: 'firebase', row: 5, col: 1,},
      { id: 'logger', row: 2, col: 7,},
      { id: 'crm', row: 5, col: 8,},
    ],
};
  Diagram('scheme5', elements5, {layout: 'grid'});
</script>

ΠžΡ‚ Π΅Π΄Π½Π° страна, Ρ‚Π°ΠΊΠ°Π²Π° схСма Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ няколко Π΅ΠΊΡ€Π°Π½Π° с ΠΊΠΎΠ΄ Π½Π° Π»Π°ΠΏΡ‚ΠΎΠΏ, ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° страна, структурата a la json Π²ΠΈ позволява Π΄Π° ΠΏΠΎΠΏΡŠΠ»Π²Π°Ρ‚Π΅ всички Π΄Π°Π½Π½ΠΈ ΠΏΠΎ аналогия, Π±ΡŠΡ€Π·ΠΎ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ ΠΈ поставятС.

Π—Π°Ρ‰ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈΡ‚Π΅ сС поставят ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ ΠΎΡ‚ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅?

По-ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΅. ΠŸΡŠΡ€Π²ΠΎ опрСдСлямС възли. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° посочим няколко Π³Ρ€ΡƒΠΏΠΈ ΠΈ Π΄Π° Π³ΠΈ посочим във възли. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°ΠΌΠ΅ Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅. И Π΅Π΄Π²Π° Ρ‚ΠΎΠ³Π°Π²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ основнитС ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ тях са Ρ‚Π°ΠΌ, Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠ΅ мСстополоТСниСто Π½Π° Ρ‚Π΅Π·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π°. Или ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ.

МоТС Π»ΠΈ Π±Π΅Π· ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ?

МоТС ΠΈ Π±Π΅Π· ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Но Ρ‰Π΅ бъдС ΠΌΠ°Π»ΠΊΠΎ смачкано, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚Π°Π·ΠΈ опция Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅. Π’ΠΎΠ²Π° сС дълТи Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΈΠΌΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° мСстополоТСниСто Π½Π° Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π·Π° cytoscape fcose, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΡ‚Ρ‡ΠΈΡ‚Π° ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π³Ρ€ΡƒΠΏΠΈ. ΠŸΠΎΡΠΎΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΡ€Π°Π²ΠΈ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΏΠΎ-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠ°, Π½ΠΎ Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΏΡŠΡ€Π²Π°Ρ‚Π° Ρ‡Π΅Ρ€Π½ΠΎΠ²Π° Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° Π΅ възмоТно ΠΈ Π±Π΅Π· ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.

ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΈΡ‚Π΅ ΡΡŠΡ‰ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π² стила Π½Π° Battleship. Π’Π΅Π·ΠΈ. Сдиният възСл сС Π½Π°ΠΌΠΈΡ€Π° Π² a1, Π° другият Π² d5. ОсобСно ΠΏΠΎΠΌΠ°Π³Π°, Ρ‡Π΅ cytoscape ΠΏΡ€Π°Π²ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ ΠΏΠ»Π°Ρ‚Π½ΠΎΡ‚ΠΎ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΈ, Ρ‚.Π΅. ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΈ мСстим, Π΄Π° Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΠ΄Ρ€Π΅Π΄Π±Π°Ρ‚Π° Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ харСсвамС Π² ΠΊΠΎΠ΄Π°.

ΠšΠ°Ρ‚ΠΎ цяло Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΎ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅?
 
Π Π°Π·Π±ΠΈΡ€Π° сС, Π·Π° Π±ΡŠΡ€Π·ΠΎ създаванС Π½Π° Π²Π΅Ρ€ΠΈΠ³ΠΈ, Π½Π°ΠΏΡ€Π°Π²ΠΈΡ… си малък Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ сам Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° схСмата ΠΈ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π½Π°ΠΉ-Π½ΠΎΠ²Π°Ρ‚Π° вСрсия Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° (Π² localStorage).

ΠžΠΏΠΈΡ‚Π²Π°Π»ΠΈ Π»ΠΈ стС Π³ΠΎ? Π’Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ към страницата си.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΎΡ‚Π½ΠΎΠ²ΠΎ:

1. Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° скрипта

<script src="https://unpkg.com/@antirek/[email protected]/dist/code-full.min.js"></script>

2. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΊΠΎΠ΄ към html

<div id="scheme1" style="height:300px;width:800px;"></div>
<script>      
  const elements = {    
    nodes: [
      { id: 'client', type: 'smartphone', label: 'Mobile App'},
      { id: 'server', type: 'server', label: 'Main Server'},
      { id: 'db1', type: 'database', label: 'DB 1'},
      { id: 'db2', type: 'database', label: 'DB 2'},
    ],
    edges: [
      { source: 'client', target: 'server', label: 'request' },
      { source: 'server', target: 'db1', label: 'request' },
      { source: 'server', target: 'db2', label: 'request' },
    ],
  };
  Diagram('scheme1', elements);
</script>

3. Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ΄Π° към Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π°, ΠΎΡ‚ която сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ (мисля, Ρ‡Π΅ Π΅ ΠΏΠΎ-лСсно ΠΎΡ‚ рисуванСто Π½Π° Π±ΡƒΡ…Π°Π» :)

ΠŸΠΎΠ²Π΅Ρ‡Π΅ подробности Π½Π° страница Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² github.

Какъв Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚?

ΠŸΠΎΡΡ‚ΠΈΠ³Π½Π°Ρ… Ρ†Π΅Π»ΠΈΡ‚Π΅ си - Π΄Π° добавя Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈ към докумСнтацията, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΡŠΡ‚ Π΅ доста прост ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ. НС Π΅ подходящо Π·Π° супСр Π²Π΅Ρ€ΠΈΠ³ΠΈ, Π½ΠΎ Π·Π° ΠΌΠ°Π»ΠΊΠΈ Π²Π΅Ρ€ΠΈΠ³ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ обясняват структурата Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅, Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π΄ΠΎΠ±Ρ€Π΅. Π’ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±ΡŠΡ€Π·ΠΎ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ с Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ. Π”Π°, ΠΈ ΠΊΠΎΠ»Π΅Π³ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ сами Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚ Π½Π΅Ρ‰ΠΎ Π² Π΄ΠΎΠΊΠ°, ΠΏΠΎΠ½Π΅ надписи Π·Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, Π±Π΅Π· спСциално ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅))

Какво ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ?

Π’ΡƒΠΊ, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ. ДобавянС Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΈΠΊΠΎΠ½ΠΈ (всички ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ сС добавят Π½Π° линия към скрипта). Π˜Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΏΠΎ-ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅Π»Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΈΠΊΠΎΠ½ΠΈ. Π”Π°ΠΉΡ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° стила Π½Π° линията Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅. ДобавянС Π½Π° Ρ„ΠΎΠ½ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Какво мислиш?
 
Π’Π΅Ρ‡Π΅ ΠΈΠΌΠ°ΠΌ няколко ΠΈΠ΄Π΅ΠΈ Π·Π° рСализация Π² Π±Ρ€ΠΎΠ΅Π²Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΈ Π²Π°ΡˆΠΈΡ‚Π΅ Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅.

ΠœΠΎΠ΅Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌΠΎ Π² тСсСн ΠΊΡ€ΡŠΠ³ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎ-ΡƒΠ΄ΠΎΠ±Π΅Π½ инструмСнт Π·Π° рисуванС Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈ, ΠΊΠ°Ρ‚ΠΎ просто Π³ΠΈ ΠΊΠΎΠ΄ΠΈΡ€Π°Ρ‚Π΅ - ΠΊΠ°ΠΊΡ‚ΠΎ сС ΠΊΠ°Π·Π²Π° "ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚Π΅ ΠΌΠΈ Π²Π°ΡˆΠ°Ρ‚Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄"

  1. Π₯ΡƒΠ±Π°Π² ΠΈΠ·Π±ΠΎΡ€
  2. Π‘Ρ‚Ρ€Π°Ρ…ΠΎΡ‚Π½ΠΎ обслуТванС (9 Π²ΠΈΠ΄Π° ΠΎΠ½Π»Π°ΠΉΠ½ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈ)
  3. Π Π°Π·Π±ΠΈΡ€Π° сС, mermaid.js
  4. И Π°ΠΊΠΎ харСсватС супСр ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΈ ΠΈ слоТни Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Ρ‰Π΅ сС Π²ΡŠΠ·Ρ…ΠΈΡ‚ΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚: go.drawthe.net

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€