ბიბლიოთეკა
00/07 · ~34 წთ
GUIDEDECK · სისტემების ხატვა, რომელსაც ნამდვილად გაიგებენ

დიაგრამები &
მოდელირება — სურათები,
რომლებიც გუნდს ათანხმებს.

34-წუთიანი სამუშაო სესია იმ დიაგრამებზე, რომლებიც ყველა ინჟინერმა უნდა იცნობდეს და დახატოს — C4 არქიტექტურისთვის, UML sequence ნაკადებისთვის, BPMN პროცესებისთვის, ERD მონაცემებისთვის — და ინსტრუმენტები, რომლებიც მათ სიმართლეს უნარჩუნებს.

~34 წთდამწყები → საშუალოინსტრუმენტისგან დამოუკიდებელი
გადაახვიეთ
01 · საერთოდ რატომ ვხატოთ 3 წთ

სურათი გუნდს უფრო სწრაფად ათანხმებს,
ვიდრე გვერდი ტექსტი.

წაიკითხეთ სამი აბზაცი იმაზე, როგორ გადის შეკვეთა ხუთ სერვისში — და ხუთ სხვადასხვა წარმოდგენას ააგებთ. აჩვენეთ ერთი დიაგრამა და მთელი ოთახი უცებ ერთსა და იმავე რამეზე კამათობს. დიაგრამა საერთო და იაფი ადგილია, სადაც ხმამაღლა იფიქრებთ, სანამ ერთ სტრიქონ კოდს დაწერთ.

მოდელი — სისტემის შეგნებული გამარტივება, რომელიც ინარჩუნებს იმას, რაც ერთი საუბრისთვის მნიშვნელოვანია, დანარჩენს კი აგდებს. დიაგრამა უბრალოდ ბლოკებად, ხაზებად და წარწერებად დახატული მოდელია. ოსტატობა ლამაზად ხატვა არ არის — ის არის იმის არჩევა, რა გამოვტოვოთ, რომ აზრი გადარჩეს.

დიაგრამას აუდიტორია ირჩევს

სისტემის ერთადერთი „სწორი“ დიაგრამა არ არსებობს — არსებობს მხოლოდ სწორი დიაგრამა ამ აუდიტორიისა და ამ კითხვისთვის. ერთი და იგივე გადახდის სისტემა ოთხი სხვადასხვა სურათია იმის მიხედვით, ვინ ზის ოთახში.

  • ხელმძღვანელს სჭირდება ერთი ბლოკი და სისტემები, რომლებსაც ის ეხება — და არა თქვენი კლასების სახელები.
  • ახალ ინჟინერს სჭირდება დასადეპლოი ნაწილები და ის, როგორ მოძრაობს მოთხოვნა მათ შორის.
  • DBA-ს სჭირდება ცხრილები, გასაღებები და კავშირები — სხვა არაფერი.
  • აირჩიეთ მასშტაბის დონე და ნოტაცია, რომელიც დასმულ კითხვას პასუხობს, და გაჩერდით.

ერთი სისტემა, ოთხი აუდიტორია — ოთხი დიაგრამა ოთხ მასშტაბზე.

თანხმობა

ერთი საერთო მოდელი

დიაგრამაზე კამათი კოდზე კამათზე იაფია. უთანხმოება წუთებში ამოტივტივდება და არა მომდევნო სპრინტის pull request-ში.

ადაპტაცია

ახალბედას რუკა მიეცით

კარგი კონტექსტის დიაგრამა ახალ თანამშრომელს ერთ კვირას უზოგავს, რომელსაც კოდის კითხვაში დახარჯავდა, რომ გაეგო რა რასთან საუბრობს.

გადაწყვეტა

კომპრომისები თვალსაჩინო გახდეს

დიზაინის დახატვა რთულ კითხვებს ადრევე სვამს — სად ცხოვრობს მონაცემები, ვინ ვის იძახებს, რა ხდება შეცდომისას.

02 · C4 მოდელი 6 წთ

არქიტექტურას მიუახლოვდით
თითო დონით.

არქიტექტურის დიაგრამების უმეტესობა ერთნაირად ვარდება: ერთი ტილო ცდილობს ერთდროულად აჩვენოს მომხმარებლები, სერვისები, კლასები და რიგები — და ვერავინ კითხულობს მას. C4 ამას ასწორებს ოთხი ფიქსირებული მასშტაბის დონით, როგორც Google Maps პროგრამული უზრუნველყოფისთვის — ქვეყანა, ქალაქი, ქუჩა, შენობა.

C4 — Context, Container, Component, Code — Simon Brown-ის შექმნილი მოდელია პროგრამული არქიტექტურის ოთხ მასშტაბზე აღსაწერად. თითოეულ დონეს აქვს ფიქსირებული აუდიტორია და ფიქსირებული დეტალიზაცია. ზედა ორს თითქმის ყველაფრისთვის ხატავთ; ქვედა ორს — მხოლოდ მაშინ, როცა რომელიმე ნაწილს ეს ნამდვილად სჭირდება.
1
Context
თქვენი სისტემა + ადამიანები და სისტემები მის გარშემო
2
Container
მის შიგნით არსებული დასადეპლოი/გასაშვები ნაწილები
3
Component
ერთი კონტეინერის შიგნით მთავარი სამშენებლო ბლოკები
4
Code
კლასები/ფუნქციები — ჩვეულებრივ ავტომატურად გენერირებული

კონტეინერი C4-ში არ ნიშნავს Docker-ს — ის ნიშნავს ცალკე გასაშვებ ან დასადეპლოი რამეს: ვებ აპლიკაციას, API-ს, მონაცემთა ბაზას, მობილურ აპლიკაციას. აი ორი დონე, რომელსაც ყველაზე ხშირად დახატავთ:

დონე 1 · Context

მთელი სისტემა ერთ ბლოკად — ვინ იყენებს, რაზეა დამოკიდებული. არატექნიკური დაინტერესებული მხარეებისთვის.

დონე 2 · Container

ახადეთ სახურავი: დასადეპლოი ნაწილები და როგორ ესაუბრებიან ერთმანეთს. გუნდში ახლად შემოსული ინჟინრებისთვის.

03 · UML sequence დიაგრამები 5 წთ

აჩვენეთ ნაკადი ისე, როგორც ის
დროში ვითარდება.

Context ან Container დიაგრამა აჩვენებს სტრუქტურას — რა არსებობს. Sequence დიაგრამა აჩვენებს ქცევას — შეტყობინებების ზუსტ თანმიმდევრობას, როცა ერთი კონკრეტული რამ ხდება, მაგალითად მომხმარებელი სისტემაში შედის. ეს საუკეთესო დიაგრამაა API გამოძახების ან რამდენიმე სერვისზე გამავალი ნაკადის ასახსნელად.

Sequence დიაგრამა — UML დიაგრამა, რომელიც ზემოდან ქვემოთ დროდ იკითხება. ყოველ მონაწილეს აქვს ვერტიკალური სასიცოცხლო ხაზი; ჰორიზონტალური შეტყობინებები (ისრები) მათ შორის თანმიმდევრობით მოძრაობს. UML (Unified Modeling Language) პროგრამული დიაგრამების დიდი ხნის სტანდარტული ნოტაციაა — sequence დიაგრამა კი მისი ყველაზე ხშირად გამოყენებული წევრი.
%% Mermaid — renders to the diagram beside it sequenceDiagram User->>Browser: tap "Log in" Browser->>API: POST /login API->>DB: SELECT user DB-->>>API: user row API-->>>Browser: 200 + token Browser-->>>User: show dashboard
User Browser API DB tap "Log in" POST /login SELECT user user row 200 + token show dashboard

მთლიანი ისრები გამოძახებებია (მიდის მარჯვნივ); წყვეტილი ისრები — დაბრუნებული პასუხები. დრო ქვემოთ მიედინება.

აქტორი / მონაწილე

ბლოკი ზემოთ — ადამიანი, სერვისი, მონაცემთა ბაზა. თითოეულს ეკუთვნის ქვემოთ არსებული სასიცოცხლო ხაზი.

lifeline

წყვეტილი ვერტიკალური ხაზი. ხაზზე უფრო ქვემოთ ყოფნა ნიშნავს „უფრო გვიან დროში“.

შეტყობინება

ჰორიზონტალური ისარი. მთლიანი — სინქრონული გამოძახებისთვის, წყვეტილი — დაბრუნებული პასუხისთვის.

აქტივაცია

თხელი ზოლი სასიცოცხლო ხაზზე, რომელიც აჩვენებს, რომ მონაწილე ამ გამოძახებაზე მუშაობს.

შემოიფარგლეთ ერთი სცენარით. Sequence დიაგრამა თავის ფასს მაშინ ამართლებს, როცა ერთი ნაკადის წარმატებულ გზას აჩვენებს, ან ერთ შეცდომის შემთხვევას — და არა ყოველ განშტოებას. თუ ათეულობით ციკლსა და პირობას ამატებთ, სინამდვილეში ფლოუჩარტი ან BPMN დიაგრამა გჭირდებათ.

04 · BPMN — პროცესის მოდელირება 5 წთ

დაამოდელეთ, როგორ მიედინება სამუშაო,
და არა როგორ მუშაობს კოდი.

ზოგი ნაკადი იმაზე კი არაა, როგორ იძახებენ სერვისები ერთმანეთს — ის ბიზნეს პროცესზეა: შემოდის მოთხოვნა, ვიღაც განიხილავს მას, გადაწყვეტილება ტოტავს გზას, სამუშაო სრულდება, პროცესი მთავრდება. BPMN სწორედ ამის დასახატი სტანდარტია, რომ ინჟინრებმა, ანალიტიკოსებმა და მენეჯერებმა ერთი და იგივე სურათი წაიკითხონ.

BPMN — Business Process Model and Notation — ფიგურების სტანდარტული ნაკრებია პროცესის დასაწყისიდან დასასრულამდე მოდელირებისთვის. მისი ძალა საერთო ლექსიკონია: წრე ყოველთვის მოვლენაა, მომრგვალებული მართკუთხედი ყოველთვის დავალებაა, რომბი ყოველთვის გადაწყვეტილებაა. არადეველოპერსაც შეუძლია მისი წაკითხვა სახელმძღვანელოს გარეშე.

წვდომის მოთხოვნის პროცესი: დაწყების მოვლენა, დავალება, ექსკლუზიური (ან/ან) გეითვეი, ორი შედეგი და დასრულების მოვლენა.

მოვლენა · წრე

რაღაც ხდება

თხელი წრე იწყებს პროცესს; სქელი წრე ასრულებს მას. მოვლენები ნაკადის შუაშიც შეიძლება მოხდეს (ტაიმერი, შემოსული შეტყობინება).

დავალება · ბლოკი

სამუშაოს ერთეული

ერთი ნაბიჯი, რომელსაც ადამიანი ან სისტემა ასრულებს — „მოთხოვნის გაგზავნა“, „წვდომის მიცემა“. პროცესის ზმნები.

გეითვეი · რომბი

გზა იტოტება ან ერთდება

ექსკლუზიური გეითვეი (×) ზუსტად ერთ ტოტს ირჩევს; პარალელური (+) ტოტებს ერთდროულად უშვებს. ეს გადაწყვეტილებებია.

ნაკადი · ისარი

შესრულების თანმიმდევრობა

მთლიანი ისარი თანმიმდევრობაა — რა ხდება შემდეგ. ზოლები (აქ ნაჩვენები არაა) დავალებებს მფლობელის მიხედვით აჯგუფებს.

Sequence დიაგრამა თუ BPMN? Sequence დიაგრამას მიმართეთ, როცა აუდიტორია ინჟინრებია და კითხვაა „რა რას იძახებს და რა თანმიმდევრობით“. BPMN-ს მიმართეთ, როცა აუდიტორიაში ბიზნესიცაა და კითხვაა „რა ნაბიჯები და გადაწყვეტილებებია ამ პროცესში“.

05 · ERD-ები და მონაცემები 5 წთ

დახატეთ თქვენი მონაცემების
ფორმა, სანამ შეინახავთ მათ.

სანამ პირველი ცხრილი გაჩნდება, არსებისა და კავშირების დიაგრამა საშუალებას გაძლევთ შეთანხმდეთ, რა საგნებს ინახავთ, რა ფაქტებს იცავთ თითოეულზე და როგორ უკავშირდებიან ისინი ერთმანეთს. სწორად დაალაგეთ კავშირები და კარდინალობა ქაღალდზე და თავიდან აიცილებთ ყველაზე ძვირ შეცდომას — სქემას, რომელიც დატვირთვის ქვეშ უნდა მიგრირდეს.

ERD — Entity-Relationship Diagram — მონაცემებს აღწერს როგორც არსებს (საგნები, რომლებსაც ინახავთ, ჩვეულებრივ ცხრილი — Customer, Order), მათ ატრიბუტებს (სვეტები — name, total) და მათ შორის კავშირებს. კარდინალობა კავშირზე დაწესებული რაოდენობის წესია: ერთი არსის რამდენი ეგზემპლარი უკავშირდება მეორის რამდენს.
%% Mermaid ER — one customer, many orders erDiagram CUSTOMER ||--o{ ORDER : places ORDER }o--o{ PRODUCT : contains CUSTOMER { int id PK string email } ORDER { int id PK int customer_id FK }
PK id name email
CUSTOMER
PK id FK customer_id total
N
ORDER
PK id name price
PRODUCT
M
აფორმებს · 1:N
შეიცავს · M:N

ჩანგლისებრი „ყვავის ფეხი“ ნიშნავს „ბევრს“; ერთი ხაზი — „ერთს“.

ერთი-ბევრთან · 1:N

ყველაზე გავრცელებული შემთხვევა. ერთი კლიენტი აფორმებს ბევრ შეკვეთას; თითოეული შეკვეთა ზუსტად ერთ კლიენტს ეკუთვნის (უცხო გასაღები „ბევრის“ მხარეს).

ბევრი-ბევრთან · M:N

შეკვეთა შეიცავს ბევრ პროდუქტს; პროდუქტი ბევრ შეკვეთაში ჩნდება. რეალურ სქემაში ამას შუაში დამაკავშირებელი ცხრილი სჭირდება.

PK და FK

პირველადი გასაღები ცალსახად განსაზღვრავს სტრიქონს; უცხო გასაღები სხვა ცხრილის პირველად გასაღებზე მიუთითებს — ეს ის მავთულია, რომელზეც კავშირი დგას.

ყვავის ფეხის ნოტაცია ის დიალექტია, რომელსაც ყველაზე ხშირად შეხვდებით: სამკბილა „ფეხი“ აღნიშნავს ბევრის მხარეს, პატარა ხაზი — ერთის მხარეს, დამატებითი წრე კი ნიშნავს, რომ კავშირი არასავალდებულოა (ნული დაშვებულია). ის მარცხნიდან მარჯვნივ წინადადებასავით იკითხება — „ერთი კლიენტი აფორმებს ნულ ან ბევრ შეკვეთას“.

06 · ინსტრუმენტების ლანდშაფტი 5 წთ

დიაგრამა როგორც კოდი
თუ სახატავი ინსტრუმენტები.

ინსტრუმენტების მთავარი არჩევანი ის კი არაა, რომელი აპლიკაცია — არამედ ის, თქვენი დიაგრამები ტექსტია, რომელსაც რეპოზიტორიაში აკომიტებთ თუ ხელით დახატული სურათებია. თითოეული სხვადასხვა ამოცანაში იგებს; მომწიფებული გუნდები ორივეს შეგნებულად იყენებენ.

დიაგრამა როგორც კოდი — დიაგრამების წერა ჩვეულებრივ ტექსტად, რომელიც სურათად აისახება. რაკი წყარო ტექსტია, ის თქვენს კოდთან ერთად ცხოვრობს, pull request-ში იდიფება და არასდროს ძველდება ჩუმად. კომპრომისი: თმობთ განლაგებაზე პიქსელამდე ზუსტ კონტროლს.
Mermaid

დიაგრამა როგორც კოდი · ნაგულისხმევი

დადებითი — პირდაპირ აისახება GitHub-ში, GitLab-სა და Markdown-ში; ინსტალაცია არ სჭირდება.
უარყოფითი — ავტომატური განლაგება დიდ, მჭიდრო დიაგრამებზე უხერხული ხდება.

PlantUML

დიაგრამა როგორც კოდი · ძლიერი

დადებითი — UML-ის ყველაზე ფართო დაფარვა და ზუსტი კონტროლი; ბრძოლაში გამოცდილი.
უარყოფითი — სჭირდება რენდერის სერვერი/Java; სინტაქსი უფრო რთული სასწავლია.

Excalidraw

ხატვა · დაფა

დადებითი — სწრაფი, ხელით ნახატის შეგრძნებით; იდეალურია ცოცხალი ბრეინშტორმისთვის.
უარყოფითი — თავისუფალი ფორმა, ამიტომ რეალობას სცილდება და git-ში ვერსირებული არაა.

draw.io

ხატვა · უფასო & ზუსტი

დადებითი — უფასო, ფიგურების უზარმაზარი ბიბლიოთეკები, ინახება ფაილად, რომელიც შეგიძლიათ დააკომიტოთ.
უარყოფითი — ხელით განლაგება მოვლას მოითხოვს; დიფები წაუკითხავი XML-ია.

Lucidchart

ხატვა · გაპრიალებული & გაზიარებადი

დადებითი — გამართული ერთობლივი მუშაობა, შაბლონები, შესანიშნავია ხელმძღვანელობისთვის განკუთვნილი პრეზენტაციებისთვის.
უარყოფითი — ფასიანი SaaS; რეპოზიტორიის გარეთ ცხოვრობს, ამიტომ ჩუმად ძველდება.

როგორ ავირჩიოთ

ინსტრუმენტი სიცოცხლის ხანგრძლივობას მოარგეთ

დიაგრამა, რომელიც ჭეშმარიტი უნდა დარჩეს → დიაგრამა როგორც კოდი git-ში. ერთჯერადი ბრეინშტორმი → Excalidraw. გაპრიალებული გადაცემა → Lucidchart ან draw.io.

  • არქიტექტურა & ნაკადები, რომლებიც შეხვედრას გადაურჩება — Mermaid ან PlantUML, კოდის გვერდით დაკომიტებული. მათ კოდივით ამოწმებენ და ანახლებენ, ამიტომ ისინი პატიოსანი რჩება.
  • ცოცხალი ფიქრი ზარის დროს — Excalidraw. სიჩქარე და წაშლადობა სიზუსტეს სჯობს; თუ მნიშვნელოვანია, სქრინშოტი ტიკეტში ჩადეთ.
  • დიაგრამა, რომელიც საინჟინრო ორგანიზაციას ტოვებს — Lucidchart ან draw.io, სადაც გაპრიალება და გაზიარებადობა თავის ფასს ამართლებს.
  • რაც არ უნდა აირჩიოთ, დიაგრამის წყარო იქ დაწერეთ, სადაც კოლეგა იპოვის და დაარედაქტირებს — არარედაქტირებადი PNG ის ადგილია, სადაც სიზუსტე კვდება.
07 · აირჩიეთ სწორი დიაგრამა და შეჯამება 5 წთ

დაიწყეთ კითხვიდან,
შემდეგ აირჩიეთ დიაგრამა.

ამ პრეზენტაციის ყოველი დიაგრამა სხვადასხვა აუდიტორიისთვის სხვადასხვა კითხვას პასუხობს. ოსტატობა ამ ორის შეხამებაშია — და შემდეგ იმდენის დახატვაში, რამდენიც ამ კითხვას სჭირდება.

„რა არის ეს სისტემა?“

C4 Context / Container

დაინტერესებული მხარეებისა და ახალი ინჟინრებისთვის — ბლოკები და მათ შორის სადენები.

„რა რას იძახებს და როდის?“

UML sequence

ინჟინრებისთვის, რომლებიც სერვისებზე გამავალ ერთ ნაკადს დროში აანალიზებენ ან აპროექტებენ.

„რა ნაბიჯებია?“

BPMN

ბიზნესისა და ინჟინერიისთვის, რომლებიც პროცესს გადაწყვეტილებებითა და შედეგებით ათვალიერებენ.

„რა ფორმისაა მონაცემები?“

ERD

ყველასთვის, ვინც სქემას ეხება — არსები, ატრიბუტები და კარდინალობა.

1დიაგრამას აუდიტორია ირჩევს. ერთადერთი სწორი სურათი არ არსებობს — არსებობს მხოლოდ სწორი სურათი ამ ოთახისა და ამ კითხვისთვის.
2მასშტაბი შეგნებულად აირჩიეთ. C4-ის დონეები (Context → Container → Component → Code) თითოეულ ტილოს ერთ სიმაღლეზე აჩერებს. გაჩერდით, როცა დეტალი აღარ გეხმარებათ.
3სტრუქტურა, ქცევა, პროცესი თუ მონაცემები. Container აჩვენებს სტრუქტურას, sequence — ქცევას, BPMN — პროცესს, ERD — მონაცემებს. იცოდეთ, რომელი გჭირდებათ.
4რაღაცეები გამოტოვეთ. მოდელი ღირებულია იმით, რასაც გამოტოვებს. ერთი ნათელი სცენარი სჯობს ამომწურავს, რომელიც არ იკითხება.
5წყარო იქ შეინახეთ, სადაც ჭეშმარიტი დარჩება. დიაგრამა როგორც კოდი git-ში ყველაფრისთვის, რაც არ უნდა გადაუხვიოს; დაფები ხმამაღლა ფიქრისთვის.
ცოდნის შემოწმება

დაგამახსოვრდათ?

ხუთი სწრაფი კითხვა C4-ზე, sequence დიაგრამებზე, BPMN-ზე, ERD-ებზე და ინსტრუმენტებზე — მყისიერი უკუკავშირი, შესვლის გარეშე.

შეაფასეთ ეს დასტა
იყავით პირველი

ნავიგაცია ← → ღილაკებით ან სქროლით · უკან ბიბლიოთეკაში