Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΠΏΠ°ΡΡ Π»Π΅Ρ ΡΡΠ°Π» Π±ΠΎΠ»ΡΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ. ΠΠ°ΠΏΠΈΡΠ°ΡΡ ΠΏΠΎΡΡΠ½ΡΡΡΠΈΠΉ ΡΠ΅ΠΊΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ° ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° β Π² ΡΠ΅Π»ΠΎΠΌ, ΡΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ. ΠΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡ Π΅ΠΌΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄ΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½Ρ Π²ΡΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΡΠΎΠΆΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ Π»Π΅Π³ΠΊΠΎ.
ΠΠΎ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ β ΡΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π² Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. Π Π»Π°Π΄Π½ΠΎ Π±Ρ ΡΠ΅ΠΊΡΡ, Π½ΠΎ ΡΡ Π΅ΠΌΡβ¦ Π’.ΠΊ. Π²ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΠ½Π»Π°ΠΉΠ½, Ρ.Π΅. Π² ΡΠΎΡΠΌΠ°ΡΠ΅ html, ΡΠΎ ΠΊ ΡΠ΅ΠΊΡΡΡ ΠΏΡΠΈΠ»Π°Π³Π°ΡΡΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ gif/jpeg/png, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Ρ ΡΡ Π΅ΠΌΡ. Π ΡΡ Π΅ΠΌΡ ΡΠΈΡΡΡΡΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΡΠΈΠΏΠ° Visio ΠΈΠ»ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½-ΡΠ΅ΡΠ²ΠΈΡΠ°Ρ Π°-Π»Ρ draw.io. ΠΠ°ΡΠ΅ΠΌ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡ ΡΡ Π΅ΠΌΡ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΈ ΠΏΡΠΈΠ»Π°Π³Π°Π΅ΡΡ ΠΊ html. ΠΡΠ΅ ΠΏΡΠΎΡΡΠΎ.
Π ΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°?
Π‘Ρ
Π΅ΠΌΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ΅. Π’ΠΎΡΠ½Π΅Π΅, Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠ΅. ΠΠ°, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π΄Π΅ΡΡΡΠΎΠΊ-Π΄Π²Π°, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ²ΡΠ·Π΅ΠΉ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΡΠΎΠ»ΡΠΊΠΎ ΠΆΠ΅. ΠΠ»ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ, ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠΎΡΡΡΠ΅ ΡΡ
Π΅ΠΌΡ ΠΈ Π½Π° ΡΠ»ΠΎΠ²Π°Ρ
ΠΎΠΏΠΈΡΠ°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ, Π° ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΡΠ΅, ΠΊΡ
-ΠΌβ¦ (Ρ) Β«Π½Π΅ ΠΏΠΎΠΉΠΌΡΡ-ΡΒ». Π‘Ρ
Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π½ΠΈΡ
Π½ΡΠΆΠ½ΠΎ Π²Π½ΠΎΡΠΈΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ-ΡΠΏΠΈΠ·ΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ, Ρ.Π΅. ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ, Ρ.ΠΊ. ΠΎΠ½ΠΈ ΠΈΠ΄ΡΡ Π²ΡΠ»Π΅Π΄ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Π½Π°ΡΠΈΡ
ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ².
ΠΠΎΠΆΠ½ΠΎ ΠΆΠ΅ Π²ΡΡΡΠ°ΠΈΠ²Π°ΡΡ html ΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΡΠΎΠ±ΠΎΠ²Π°Π»?
ΠΠ°, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ. ΠΠ½Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΡΠ°Π²ΡΡΡΡ Π³ΡΠ°ΡΠΈΠΊΠΈ gliffy.com. ΠΠΎ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π°Π΄ΠΎ ΠΈΠ΄ΡΠΈ Π² ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ, ΡΠ°ΠΌ ΠΏΡΠ°Π²ΠΈΡΡ. Π ΡΠ»ΠΎΠΆΠ½Π΅Π΅ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΠΏΡΠ°Π²ΠΊΠΈ ΠΊΠΎΠ»Π»Π΅Π³Π΅.
Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ?
ΠΠ΅Π΄Π°Π²Π½ΠΎ Π½Π° Π³ΠΈΡΡ
Π°Π±Π΅ ΠΌΠ½Π΅ ΠΏΠΎΠΏΠ°Π»ΡΡ Π² ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΡ
ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
Π ΡΠ»ΠΎΠ²Ρ ΡΠΊΠ°Π·Π°ΡΡ, Π½ΠΎ Ρ ΠΏΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ Π² html. ΠΠ±ΡΡΠ½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ markdown-ΡΠ΅ΠΊΡΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ΅ΠΌ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡΠ΄Ρ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ wintersmith. ΠΠ»ΠΈ wiki-ΡΠΈΡΡΠ΅ΠΌΠ°.
ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ: Π²ΠΎΡ ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΠ΅ΠΊΡΡ, Π·Π°ΡΠ΅ΠΌ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ΅Π³ script ΠΈ Π² Π½Π΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½ js ΠΊΠΎΠ΄ ΡΡ Π΅ΠΌΡ.
Π§ΡΠΎ ΠΎΠΏΡΡΡ Π½Π΅ ΡΠ°ΠΊ?
ΠΡΠΎΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΌΠ½Π΅ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΡΡ, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ³Π΄Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ ΡΠΈΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ. (Π ΠΊΠΎΠ½ΡΠ΅ ΡΡΠ°ΡΡΠΈ Π±ΡΠ΄ΡΡ ΡΡΡΠ»ΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΡΠ°ΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π³ΡΠ³Π»ΠΈΠ» ΠΏΠΎ ΡΠ΅ΠΌΠ΅ diagram as code.)
Π Π²Π΅Π΄Ρ Ρ Π½Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠ°Π²Π»Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. ΠΠ½ΠΎΠ³Π΄Π° ΡΠ²ΠΎΡ Π»Π΅ΠΏΡΡ Π²Π½ΠΎΡΡΡ ΠΈ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ β ΡΠ»ΠΎΠ²ΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΡ, ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ, Π½ΠΎΠ²ΡΠ΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ.Β
ΠΠΎΡΡΠΎΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ Π²ΠΈΠ΄Π΅ΡΡ Π² ΡΠΈΡΠ°Π΅ΠΌΠΎΠΌ ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±Ρ Π½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π΄ΠΎΠ»Π³ΠΎ ΠΎΠ±ΡΡΠ°ΡΡΡΡ. Π ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ copy-paste ΡΠ΄Π΅Π»Π°ΡΡ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΡΡ Π΅ΠΌΡ.Β
Π Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ»Π»Π΅Π³Π° Π·Π°ΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ ΠΊΠΎΠ΄ ΡΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Ρ ΠΎΡΠΎΡΠΎ, Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ, Π²ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΡΡΠΎΠ³ΠΎ ΠΈ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠΎΡΡΠΎΠΌΡ Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΡ Π΅ΠΌΡ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ·Π»Ρ, ΡΠ²ΡΠ·ΠΈ, Π³ΡΡΠΏΠΏΡ ΡΠ·Π»ΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ·Π»ΠΎΠ². ΠΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π½Π° ΠΌΠΎΠΉ ΡΠΊΡΠΎΠΌΠ½ΡΠΉ Π²Π·Π³Π»ΡΠ΄ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, Ρ ΠΎΡΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π½Π° Π²ΠΊΡΡ ΠΈ ΡΠ²Π΅Ρβ¦
ΠΠ°ΠΊ ΡΡΠΎ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅?
- ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π» ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ·Π΅Π».
- Π’Π°ΠΊΠΆΠ΅ ΠΊ ΡΠ·Π»Ρ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½Π°Π΄ΠΏΠΈΡΡ.
- ΠΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΠ·Π»Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ²ΡΠ·Ρ.
- ΠΠ»Ρ ΡΠ²ΡΠ·ΠΈ Π½Π° ΡΡ Π΅ΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΡΠ²Π΅Ρ, Π½Π°Π΄ΠΏΠΈΡΡ.
- ΠΠ°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ²ΡΠ·ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΊ ΡΠ΅Π»ΠΈ. Π ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΈ ΡΠ΅Π»Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ ΡΠ·Π»Π°.
- ΠΠ΄ΠΈΠ½ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ·Π»ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² Π³ΡΡΠΏΠΏΡ.
- Π‘Π²ΡΠ·Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΈ ΠΎΡ Π³ΡΡΠΏΠΏΡ, ΠΈ ΠΊ Π³ΡΡΠΏΠΏΠ΅.
ΠΠΎΠ»ΡΠ·ΡΡΡΡ ΡΡΠΈΠΌΠΈ ΠΏΡΠΎΡΡΡΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π²ΠΎΡ ΡΠ°ΠΊΠ°Ρ ΡΡ Π΅ΠΌΠ°. ΠΡΠΎΡΡΠΎ? ΠΠΏΠΎΠ»Π½Π΅.
Π ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠ½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ js-ΠΊΠΎΠ΄ΠΎΠΌ. ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π·Π΄Π΅ΡΡ β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ elements. Π ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΊΠ°Π·Π°Π½Ρ nodes β ΡΠ·Π»Ρ, edges β ΡΠ²ΡΠ·ΠΈ.
Β
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);
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ ΡΡ
Π΅ΠΌΡ Ρ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π» Π½Π΅ ΡΠ°ΠΌ, Π° Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ
ΠΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠ»ΠΎΠΆΠ½Π΅Π΅?
ΠΠ°, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°.Β ΠΠ»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ β ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ positions, Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π³ΡΡΠΏΠΏ β ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ Π³ΡΡΠΏΠΏ Π² groups, Π° Ρ ΡΠ°ΠΌΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π°ΡΡΠΈΠ±ΡΡ group.
Π ΡΡΠΎ ΠΊΠΎΠ΄:
<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>
Π’Π°ΠΊΠ°Ρ ΡΡ Π΅ΠΌΠ° Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ β ΡΡΠΎ ΠΏΠΎΡΡΠΈ ΠΏΠ°ΡΠ° ΡΠΊΡΠ°Π½ΠΎΠ² ΠΊΠΎΠ΄Π° Π½Π° Π½ΠΎΡΡΠ΅, Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ° Π°-Π»Ρ json ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ, Π±ΡΡΡΡΠΎ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ copy-paste.
Π ΠΏΠΎΡΠ΅ΠΌΡ positions Π²ΡΠ½Π΅ΡΠ΅Π½Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΡ ΡΠ·Π»ΠΎΠ²?
Π’Π°ΠΊ ΡΠ΄ΠΎΠ±Π½Π΅Π΅. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ nodes. ΠΠ°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠ°ΡΡ-ΡΡΠΎΠΉΠΊΡ Π³ΡΡΠΏΠΏ ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΡ Π² ΡΠ·Π»Π°Ρ . ΠΠ°ΡΠ΅ΠΌ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΠΌ ΡΠ²ΡΠ·ΠΈ. Π ΡΠΆ Π·Π°ΡΠ΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ Π΅ΡΡΡ, Π±Π΅ΡΠ΅ΠΌΡΡ Π·Π° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π° ΡΡ Π΅ΠΌΠ΅. ΠΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
Π ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· positions?
ΠΠΎΠΆΠ½ΠΎ ΠΈ Π±Π΅Π· positions. ΠΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΊΠΎΠΌΠΊΠ°Π½ΠΎ, Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ. ΠΡΠΎ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½ΠΎ ΡΠ΅ΠΌ, ΡΡΠΎ Π΄Π»Ρ cytoscape Π΅ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ·Π»ΠΎΠ²
Π’Π°ΠΊΠΆΠ΅ positions ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π² ΡΡΠΈΠ»Π΅ ΠΠΎΡΡΠΊΠΎΠ³ΠΎ Π±ΠΎΡ. Π’.Π΅. ΠΎΠ΄ΠΈΠ½ ΡΠ·Π΅Π» ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π² a1, Π° Π΄ΡΡΠ³ΠΎΠΉ Π² d5. ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ, ΡΡΠΎ cytoscape ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π° canvas ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΡΠΌΠΈ, Ρ.Π΅. ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡ ΠΏΠΎΠ΄Π²ΠΈΠ³Π°ΡΡ, ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° Π·Π°ΡΠ΅ΠΌ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ²ΡΠ΅Π΅ΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
Π ΡΠ΅Π»ΠΎΠΌ, ΠΏΠΎΠ½ΡΡΠ½ΠΎ. ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ?
Β
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡ
Π΅ΠΌ ΡΠ΄Π΅Π»Π°Π» ΡΠ΅Π±Π΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ
ΠΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ? ΠΠΎΠΆΠ½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΈ ΠΊ ΡΠ΅Π±Π΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ.
Π’ΠΎΠ³Π΄Π° Π΅ΡΠ΅ ΡΠ°Π·:
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. ΠΏΡΠ°Π²ΠΈΠΌ ΠΊΠΎΠ΄ Π΄ΠΎ Π½ΡΠΆΠ½ΠΎΠΉ Π½Π°ΠΌ ΡΡ Π΅ΠΌΡ (Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ ΡΠ΅ΠΌ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ²Ρ π
ΠΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ Π½Π°
Π§ΡΠΎ Π² ΠΈΡΠΎΠ³Π΅?
Π‘Π²ΠΎΠΈΡ ΡΠ΅Π»Π΅ΠΉ Ρ Π΄ΠΎΡΡΠΈΠ³ β ΡΠ΄Π΅Π»Π°ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡ Π΅ΠΌ inline Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΡΠΎΡΠΌΠ°Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ. ΠΠ»Ρ ΡΡΠΏΠ΅ΡΡΡ Π΅ΠΌ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ, Π° Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΡΡ Π΅ΠΌ, ΠΏΠΎΡΡΠ½ΡΡΡΠΈΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠ²ΡΠ·Π΅ΠΉ β ΠΎΡΠ΅Π½Ρ Π΄Π°ΠΆΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ. ΠΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡΡΠΎ ΠΏΠΎΠ΄ΠΏΡΠ°Π²ΠΈΡΡ ΠΈ ΡΡΠΎ-ΡΠΎ Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ. ΠΠ°, ΠΈ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ ΠΌΠΎΠ³ΡΡ Π² Π΄ΠΎΠΊΠ΅ ΡΠ°ΠΌΠΈ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΏΡΠ°Π²ΠΈΡΡ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ Π±Π΅Π· ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ))
Π§ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»ΡΡΡΠΈΡΡ?
Π’ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ², ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΠ°ΡΡΠ°. Π‘Π΄Π΅Π»Π°ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠΊΠΎΠ½ΠΎΠΊ (Π²ΡΠ΅ ΠΈΠΌΠ΅ΡΡΠΈΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ inline Π² ΡΠΊΡΠΈΠΏΡ). ΠΠΎΠ΄ΠΎΠ±ΡΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΈΠΊΠΎΠ½ΠΎΠΊ. Π‘Π΄Π΅Π»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΡΠΈΠ»Ρ Π»ΠΈΠ½ΠΈΠΈ ΡΠ²ΡΠ·Π΅ΠΉ. ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
Π ΡΡΠΎ Π΄ΡΠΌΠ°Π΅ΡΠ΅ Π²Ρ?
Β
Π£ ΠΌΠ΅Π½Ρ ΡΠΆΠ΅ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ΄Π΅ΠΉ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π² issues, Π²Ρ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ²ΠΎΠΈ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Π² ΡΠ·ΠΊΠΎΠΌ ΡΠΏΠ΅ΠΊΡΡΠ΅ Π·Π°Π΄Π°Ρ, ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌ, ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π² ΠΈΡ β ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ ‘show me your diagram as code’
Π₯ΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π±ΠΎΡΠΊΠ° Π¨ΠΈΠΊΠ°ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ Β (9 ΡΠΈΠΏΠΎΠ² Π³ΡΠ°ΡΠΈΠΊΠΎΠ² ΠΎΠ½Π»Π°ΠΉΠ½-ΡΠ΅Π΄Π°ΠΊΡΠΎΡ)ΠΠΎΠ½Π΅ΡΠ½ΠΎ, mermaid.js - Π Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π»ΡΠ±Ρ ΡΡΠΏΠ΅Ρ Π΄Π΅ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΡ
Π΅ΠΌΡ β ΡΠΎ Π²Π°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π²ΠΎΡΡ
ΠΈΡΠΈΡ ΡΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ:
go.drawthe.net
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com