Введение: Революция в документации начинается здесь
В стремительном мире разработки программного обеспечения существует неприятная правда, с которой сталкиваются все мы:наша документация почти всегда устареваетМы потратили бесчисленные часы на борьбу с инструментами для создания диаграмм методом перетаскивания, мучительно выравнивая блоки и стрелки, лишь чтобы наблюдать, как наши тщательно созданные визуализации устаревают в тот же момент, когда меняется код.
Но что, если документация могла бы успевать за разработкой? Что, если создание профессиональных архитектурных диаграмм было бы так же просто, как написание функции?
Добро пожаловать в революцию «диаграммы как код». Это руководство проведет вас черезVPasCode, браузерной платформе от Visual Paradigm, которая меняет подход команд к созданию, обмену и поддержке диаграмм архитектуры системы. Рассматривая диаграммы как код, вы узнаете, как создавать визуализации уровня публикации за минуты, а не часы, при этом обеспечивая бесшовную эволюцию вашей документации вместе с вашими системами.
Независимо от того, являетесь ли вы разработчиком, документирующим микросервисы, архитектором, представляющим результаты заинтересованным сторонам, или инженером DevOps, составляющим карту инфраструктуры, это исчерпывающее руководство вооружит вас навыками для освоения VPasCode и повышения уровня документации вашей команды.
1. Начало работы: ваша первая диаграмма за 5 минут {#getting-started}
Никакой установки, никакой настройки — только код
Одной из самых мощных функций VPasCode является его беспроблемный процесс ввода в эксплуатацию. Ничего не нужно устанавливать, создавать учетные записи или настраивать сложные конфигурации. Давайте создадим вашу первую диаграмму прямо сейчас.
Пошаговое быстрое начало:
-
Перейдите к VPasCode: Откройте ваш браузер и перейдите наhttps://www.vpascode.com/editor/
-
Выберите свой движок: Выберите в выпадающем меню:
-
Mermaid — лучший выбор для блок-схем и современной документации
-
PlantUML — идеален для UML и корпоративной архитектуры
-
Graphviz — идеально подходит для сложных сетевых топологий
-
-
Загрузите шаблон: Нажмите «Примеры» и выберите стартовый шаблон
-
Редактирование и предварительный просмотр: Измените код в левой панели; наблюдайте, как ваша диаграмма мгновенно обновляется справа
-
Экспорт или обмен: Скачайте в формате SVG/PNG или скопируйте общедоступную ссылку

Рисунок 1: VPasCode мгновенно преобразует текстовый код в профессиональные архитектурные диаграммы
2. Понимание интерфейса VPasCode {#interface}
Прежде чем углубляться в синтаксис, давайте познакомимся с рабочей областью.

Рисунок 2: Двухпанельный интерфейс VPasCode: код слева, живое предпросмотр справа
Разбор компонентов интерфейса:
Левая панель (редактор кода):
-
Текстовый редактор с подсветкой синтаксиса
-
Номера строк для удобной навигации
-
Поддержка автодополнения
-
Подсветка ошибок в реальном времени
Правая панель (живой предпросмотр):
-
Мгновенная визуализация
-
Управление перемещением и масштабированием
-
Векторное отображение (чёткое на любом уровне масштабирования)
-
Элементы для проверки по клику
Верхняя панель инструментов:
-
Выбор движка (Mermaid/PlantUML/Graphviz)
-
Галерея шаблонов
-
Варианты экспорта (SVG, PNG, PDF)
-
Кнопка «Поделиться» (генерирует постоянную ссылку)
-
Настройки и предпочтения
Нижняя строка состояния:
-
Статус проверки синтаксиса
-
Счётчик символов
-
Время последнего сохранения
-
Справка по горячим клавишам
Основной принцип рабочего процесса:
Написать код → Увидеть мгновенный предпросмотр → Уточнить → Экспорт/Поделиться
Именно этот мгновенный цикл обратной связи делает VPasCode таким мощным. Здесь нет кнопки «Рендер», которую нужно нажать, и нет ожидания компиляции — только чистая, мгновенная визуальная обратная связь по мере ввода.
3. Освоение Mermaid.js: блок-схемы и не только {#mermaid-tutorial}
Mermaid.js стал фактическим стандартом для создания диаграмм, удобных для разработчиков. Его синтаксис интуитивно понятен, читаем и идеально подходит для документации, которая находится рядом с кодом.
Урок 1: Создание потока аутентификации пользователя
Давайте создадим практическую диаграмму потока аутентификации, которую вы можете использовать в следующем планировании спринта.
Пример кода:

graph TD
A[Пользователь вводит учётные данные] --> B{Корректный формат?}
B -->|Нет| C[Показать ошибку валидации]
B -->|Да| D[Отправить в службу аутентификации]
C --> A
D --> E{Учётные данные совпадают?}
E -->|Нет| F[Вернуть 401 Unauthorized]
E -->|Да| G[Сгенерировать JWT-токен]
G --> H[Сохранить токен в HttpOnly Cookie]
H --> I[Перенаправить на панель управления]
F --> A
style A fill:#e1f5ff,stroke:#0066cc
style I fill:#d4edda,stroke:#28a745
style F fill:#f8d7da,stroke:#dc3545
Что это демонстрирует:
-
Узлы принятия решений (ромбы с
{?}) -
Направленный поток (
TD= Сверху-вниз) -
Пользовательское оформление с использованием цветов
-
Самоциклические петли
-
Чёткие подписи
Урок 2: Диаграмма архитектуры микросервисов
Теперь давайте создадим более сложную архитектуру системы, показывающую взаимосвязи между сервисами.
Пример кода:

graph LR
subgraph Client["Слой клиента"]
Web[Веб-приложение<br/>React]
Mobile[Мобильное приложение<br/>Flutter]
end
subgraph API["API-шлюз"]
Gateway[Шлюз Kong]
Auth[Служба аутентификации]
Rate[Ограничитель частоты запросов]
end
subgraph Services["Бизнес-сервисы"]
User[Сервис пользователей]
Order[Сервис заказов]
Product[Сервис товаров]
Payment[Сервис платежей]
end
subgraph Data["Слой данных"]
UserDB[(База данных пользователей<br/>PostgreSQL)]
OrderDB[(База данных заказов<br/>MongoDB)]
ProductDB[(База данных товаров<br/>PostgreSQL)]
Cache[(Кэш Redis)]
end
Web --> Gateway
Mobile --> Gateway
Gateway --> Auth
Gateway --> Rate
Rate --> User
Rate --> Order
Rate --> Product
User --> UserDB
User --> Cache
Order --> OrderDB
Order --> Payment
Product --> ProductDB
Payment --> OrderDB
style Gateway fill:#ff6b6b,stroke:#c92a2a,color:white
style UserDB fill:#4ecdc4,stroke:#087f5b
style OrderDB fill:#4ecdc4,stroke:#087f5b
style ProductDB fill:#4ecdc4,stroke:#087f5b
style Cache fill:#ffe66d,stroke:#f08c00
Ключевые понятия:
-
подграфдля логической группировки -
LRдля макета слева направо -
Многострочные метки с
<br/> -
Обозначение базы данных в виде цилиндра с
[( )] -
Сложная маршрутизация и связи
Урок 3: Диаграмма последовательности для обработки заказов
Диаграммы последовательности необходимы для понимания временных взаимодействий между компонентами.
Пример кода:

sequenceDiagram
autonumber
participant C as Клиент
participant W as Веб-приложение
participant O как Сервис заказов
participant P как Сервис платежей
participant I как Сервис инвентаризации
participant N как Сервис уведомлений
C->>W: Добавить товары в корзину
C->>W: Нажать «Оформить заказ»
W->>O: POST /orders {товары, доставка}
O->>I: Зарезервировать инвентарь
I-->>O: Резервирование подтверждено
O->>P: Обработать платеж
P-->>O: Платеж успешен
O->>O: Создать запись о заказе
O->>N: Отправить подтверждение заказа
N-->>C: Подтверждение по электронной почте
O-->>W: 201 Created {orderId}
W-->>C: Показать страницу успеха
Note over O,P: Критическая секция<br/>должна быть транзакционной
rect rgba(200, 200, 0, 0.2)
O->>P: Списать средства с карты
P-->>O: ID транзакции
end
Возможности диаграммы последовательности:
-
автонумерациядля автоматической нумерации шагов -
участникобъявления -
->>для синхронных вызовов -
-->>для ответов -
Примечание наддля аннотаций -
прямоугольникдля выделения разделов
Урок 4: Диаграмма Ганта для планирования спринта
Mermaid также поддерживает визуализацию временной шкалы проекта.
Пример кода:

gantt
title Спринт 24 - Модуль аутентификации
dateFormat YYYY-MM-DD
axisFormat %m/%d
section Backend
Разработка контрактов API :выполнено, des1, 2024-06-01, 2д
Внедрение JWT-сервиса :активно, des2, 2024-06-03, 3д
Миграция базы данных : des3, после des2, 2д
Модульное тестирование : des4, после des3, 2д
section Frontend
Компонент входа : front1, 2024-06-03, 3д
Управление токенами : front2, после front1, 2д
Защищённые маршруты : front3, после front2, 2д
section Integration
Интеграция API : int1, после des4, 2д
E2E-тестирование : int2, после int1, 3д
Аудит безопасности : int3, после int2, 2д
4. Глубокое погружение в PlantUML: Корпоративная архитектура {#plantuml-tutorial}
PlantUML отлично подходит для создания формальных диаграмм UML и документации по корпоративной архитектуре. Давайте рассмотрим практические примеры.
Урок 1: Диаграмма компонентов для платформы электронной коммерции
Пример кода:

@startuml
!theme plain
skinparam backgroundColor #FFFFFF
skinparam componentStyle uml2
title "Платформа электронной коммерции - Компонентная архитектура"
package "Слой представления" {
[Веб-интерфейс] as Web
[Мобильное приложение] as Mobile
[Админ-панель] as Admin
}
package "API-слой" {
[API-шлюз] as Gateway
[Аутентификация] as Auth
[Ограничитель частоты] as RateLimit
}
package "Бизнес-сервисы" {
[Сервис каталога] as Catalog
[Сервис заказов] as Order
[Сервис оплаты] as Payment
[Сервис доставки] as Shipping
[Сервис уведомлений] as Notify
}
package "Слой данных" {
database "База данных товаров" as ProdDB
database "База данных заказов" as OrderDB
database "База данных пользователей" as UserDB
queue "Очередь сообщений" as MQ
}
Web --> Gateway
Mobile --> Gateway
Admin --> Gateway
Gateway --> Auth
Gateway --> RateLimit
Gateway --> Catalog
Gateway --> Order
Order --> Payment
Order --> Shipping
Order --> Notify
Catalog --> ProdDB
Order --> OrderDB
Auth --> UserDB
Payment ..> MQ : публиковать события
Shipping ..> MQ : подписываться на события
Notify ..> MQ : подписываться на события
@enduml

Рисунок 3: Диаграмма компонентов PlantUML, показывающая слоистую архитектуру
Урок 2: Диаграмма развертывания для облачной инфраструктуры
Пример кода:
Урок 3: Модель C4 – Диаграмма контейнеров
Модель C4 отлично подходит для коммуникации архитектуры программного обеспечения на нескольких уровнях абстракции.
Пример кода:

@startuml
!define AWS_COLOR FF9900
!define DOCKER_COLOR 0DB7ED
skinparam componentStyle uml2
skinparam backgroundColor #FAFAFA
title “Архитектура облачного развертывания”
package “Регион AWS: us-east-1” {
package “Публичная подсеть” {
[CloudFront CDN] как CDN
[Балансировщик нагрузки приложений] как ALB #AWS_COLOR
}
package “Приватная подсеть 1” {
[Веб-сервер 1] как Web1 #DOCKER_COLOR
[Веб-сервер 2] как Web2 #DOCKER_COLOR
}
package “Приватная подсеть 2” {
[Сервер API 1] как API1 #DOCKER_COLOR
[Сервер API 2] как API2 #DOCKER_COLOR
}
package “Уровень данных” {
database “RDS Основной” как RDS1 #AWS_COLOR
database “RDS Реплика” как RDS2 #AWS_COLOR
[ElastiCache Redis] как Кэш #AWS_COLOR
}
package “Хранилище” {
[S3 Bucket] как S3 #AWS_COLOR
[EFS Совместное хранилище] как EFS #AWS_COLOR
}
}
Интернет –> CDN
CDN –> ALB
ALB –> Web1
ALB –> Web2
Web1 –> API1
Web1 –> API2
Web2 –> API1
Web2 –> API2
API1 –> RDS1
API2 –> RDS1
RDS1 -[пунктир]> RDS2
API1 –> Кэш
API2 –> Кэш
API1 –> S3
API2 –> S3
Web1 –> EFS
Web2 –> EFS
@enduml
Урок 4: Диаграмма деятельности для рабочего процесса
Пример кода:

@startuml
|Клиент|
start
:Просмотр товаров;
:Добавить в корзину;
:Перейти к оформлению заказа;
|Система|
:Проверить товары в корзине;
:Рассчитать итоговую сумму;
if (Товары в наличии?) then (да)
:Зарезервировать товар;
else (нет)
:Показать отсутствие товара;
stop
endif
|Клиент|
:Ввести адрес доставки;
:Выбрать способ оплаты;
|Система|
:Обработать оплату;
if (Оплата успешна?) then (да)
:Создать заказ;
:Отправить подтверждение по электронной почте;
:Обновить остатки;
else (нет)
:Показать ошибку оплаты;
detach
endif
:Отправить заказ;
:Обновить статус заказа;
stop
partition "Фоновые задачи" {
:Сформировать счёт;
:Уведомить склад;
}
@enduml
5. Основы Graphviz: Визуализация сложных сетей {#graphviz-tutorial}
Graphviz (язык DOT) отлично подходит для визуализации сложных взаимосвязей и топологий сетей, где важны алгоритмы компоновки.
Урок 1: Граф зависимостей микросервисов
Пример кода:

Рисунок 4: Визуализация Graphviz, показывающая зависимости микросервисов и поток данных
digraph MicroservicesDependencies {
rankdir=TB;
node [shape=box, style="rounded,filled", fontname="Arial"];
edge [fontname="Arial", fontsize=10];
// Определения узлов с цветами
node [fillcolor="#e3f2fd"];
"API Gateway" [fillcolor="#ffcdd2"];
"Service Mesh" [fillcolor="#fff9c4"];
// Основные сервисы
"User Service";
"Auth Service";
"Order Service";
"Payment Service";
"Inventory Service";
"Notification Service";
"Analytics Service";
// Базы данных
node [shape=cylinder, fillcolor="#c8e6c9"];
"User DB";
"Order DB";
"Product DB";
"Analytics DB";
// Внешние сервисы
node [shape=box, fillcolor="#f3e5f5", style="dashed,filled"];
"Payment Gateway";
"Email Service";
"SMS Service";
// Связи
"API Gateway" -> "Service Mesh";
"Service Mesh" -> "User Service";
"Service Mesh" -> "Auth Service";
"Service Mesh" -> "Order Service";
"Service Mesh" -> "Payment Service";
"Service Mesh" -> "Inventory Service";
"User Service" -> "User DB";
"Auth Service" -> "User DB";
"Order Service" -> "Order DB";
"Order Service" -> "Inventory Service";
"Order Service" -> "Payment Service";
"Inventory Service" -> "Product DB";
"Payment Service" -> "Payment Gateway";
"Notification Service" -> "Email Service";
"Notification Service" -> "SMS Service";
"Analytics Service" -> "Analytics DB";
"Order Service" -> "Notification Service" [style=dashed];
"Payment Service" -> "Notification Service" [style=dashed];
// Подграфы для группировки
{
rank=same;
"User Service";
"Auth Service";
}
{
rank=same;
"Order Service";
"Payment Service";
"Inventory Service";
}
} Урок 2: Организационная иерархия
Пример кода:

digraph OrgChart {
rankdir=TB;
node [shape=box, style="rounded,filled", fontname="Helvetica"];
edge [fontname="Helvetica", arrowsize=0.7];
// Руководящий уровень
CEO [label="CEOnДжон Смит", fillcolor="#1976d2", fontcolor="white"];
// Уровень C-Level
subgraph cluster_exec {
label="Руководящая команда";
style=dashed;
color="#90caf9";
CTO [label="CTOnСара Джонсон", fillcolor="#42a5f5"];
CFO [label="CFOnМайкл Браун", fillcolor="#42a5f5"];
COO [label="COOnЭмили Дэвис", fillcolor="#42a5f5"];
CPO [label="CPOnДэвид Уилсон", fillcolor="#42a5f5"];
}
// Инженерный отдел
subgraph cluster_eng {
label="Инженерный отдел";
style=filled;
color="#e3f2fd";
VP_Eng [label="Вице-президент по инженерии", fillcolor="#64b5f6"];
subgraph cluster_eng_teams {
label="Команды";
style=dotted;
Backend [label="Команда бэкендаn(12 инженеров)", fillcolor="#bbdefb"];
Frontend [label="Команда фронтендаn(8 инженеров)", fillcolor="#bbdefb"];
DevOps [label="Команда DevOpsn(5 инженеров)", fillcolor="#bbdefb"];
QA [label="Команда QAn(6 инженеров)", fillcolor="#bbdefb"];
}
}
// Продуктовый отдел
subgraph cluster_product {
label="Продуктовый отдел";
style=filled;
color="#fff3e0";
VP_Product [label="Вице-президент по продукту", fillcolor="#ffb74d"];
PM1 [label="Менеджер продуктаnПлатформа", fillcolor="#ffcc80"];
PM2 [label="Менеджер продуктаnМобильные приложения", fillcolor="#ffcc80"];
PM3 [label="Менеджер продуктаnАналитика", fillcolor="#ffcc80"];
}
// Связи
CEO -> CTO;
CEO -> CFO;
CEO -> COO;
CEO -> CPO;
CTO -> VP_Eng;
VP_Eng -> Backend;
VP_Eng -> Frontend;
VP_Eng -> DevOps;
VP_Eng -> QA;
CPO -> VP_Product;
VP_Product -> PM1;
VP_Product -> PM2;
VP_Product -> PM3;
// Пунктирные линии для сотрудничества
PM1 -> Backend [style=dotted, color="#757575"];
PM2 -> Frontend [style=dotted, color="#757575"];
PM3 -> Backend [style=dotted, color="#757575"];
}
} Урок 3: Диаграмма потока данных
Пример кода:

digraph DataFlow {
rankdir=LR;
nodesep=1.0;
node [shape=ellipse, style="filled", fontname="Arial"];
edge [fontname="Arial", fontsize=9];
// Внешние сущности
node [fillcolor="#ffccbc", shape=box];
Customer [label="Клиент"];
Vendor [label="Поставщик"];
Bank [label="Банковская система"];
// Процессы
node [fillcolor="#c5cae9", shape=circle];
P1 [label="Оформить заказ"];
P2 [label="Обработать оплату"];
P3 [label="Обновить складские запасы"];
P4 [label="Сформировать счет"];
P5 [label="Отправить заказ"];
P6 [label="Отправить уведомление"];
// Хранилища данных
node [fillcolor="#c8e6c9", shape=box3d];
D1 [label="База данных заказов"];
D2 [label="База данных складских запасов"];
D3 [label="База данных клиентов"];
D4 [label="Записи счетов"];
// Потоки данных
Customer -> P1 [label="Запрос на заказ"];
P1 -> D1 [label="Сохранить заказ"];
P1 -> D3 [label="Обновить клиента"];
P1 -> P2 [label="Данные об оплате"];
P2 -> Bank [label="Запрос на оплату"];
Bank -> P2 [label="Подтверждение оплаты"];
P2 -> P3 [label="Успешная оплата"];
P3 -> D2 [label="Уменьшить остаток"];
P3 -> P4 [label="Заказ подтвержден"];
P4 -> D4 [label="Сохранить счет"];
P4 -> P6 [label="Данные счета"];
P3 -> P5 [label="Запрос на доставку"];
P5 -> Vendor [label="Этикетка для доставки"];
P5 -> P6 [label="Информация о трекинге"];
P6 -> Customer [label="Подтверждение заказаn+ Трекинг"];
// Пунктирные линии для запросов
D1 -> P5 [label="Получить детали заказа", style=dashed];
D2 -> P1 [label="Проверить наличие", style=dashed];
D3 -> P1 [label="Получить информацию о клиенте", style=dashed];
}
} 6. Практические шаблоны реализации {#implementation-patterns}
Шаблон 1: Документация конвейера CI/CD
Пример кода (Mermaid):

graph LR
subgraph Source["Контроль исходного кода"]
Git[Репозиторий GitHub]
PR[Запрос на слияние]
end
subgraph CI["Непрерывная интеграция"]
Lint[Проверка кода]
Test[Модульные тесты]
Build[Сборка артефактов]
Scan[Сканирование безопасности]
end
subgraph CD["Непрерывное развертывание"]
Dev[Развертывание в Dev]
Stage[Развертывание в Staging]
E2E[Интеграционные тесты]
Prod[Развертывание в Production]
end
subgraph Monitor["Мониторинг"]
Logs[Агрегация логов]
Metrics[Дашборд метрик]
Alerts[Система оповещений]
end
Git --> PR
PR --> Lint
Lint --> Test
Test --> Build
Build --> Scan
Scan --> Dev
Dev --> Stage
Stage --> E2E
E2E --> Prod
Prod --> Logs
Prod --> Metrics
Metrics --> Alerts
style Git fill:#f0f0f0,stroke:#333
style Prod fill:#d4edda,stroke:#28a745,color:black
style Alerts fill:#f8d7da,stroke:#dc3545,color:black
Шаблон 2: Проектирование схемы базы данных
Пример кода (PlantUML):

Рисунок 5: Диаграмма сущность-связь, показывающая схему базы данных электронной коммерции
@startuml
!define TABLE(name) entity name << (T,#FFAAAA) >>
!define PK(x) x <<PK>>
!define FK(x) x <<FK>>
TABLE(Users) {
PK(user_id) : INT
--
email : VARCHAR(255)
password_hash : VARCHAR(255)
created_at : TIMESTAMP
last_login : TIMESTAMP
status : ENUM
}
TABLE(Products) {
PK(product_id) : INT
--
sku : VARCHAR(50)
name : VARCHAR(255)
description : TEXT
price : DECIMAL(10,2)
stock_quantity : INT
category_id : INT
}
TABLE(Categories) {
PK(category_id) : INT
--
name : VARCHAR(100)
parent_id : INT
}
TABLE(Orders) {
PK(order_id) : INT
--
FK(user_id) : INT
order_date : TIMESTAMP
total_amount : DECIMAL(10,2)
status : ENUM
shipping_address : TEXT
}
TABLE(OrderItems) {
PK(item_id) : INT
--
FK(order_id) : INT
FK(product_id) : INT
quantity : INT
unit_price : DECIMAL(10,2)
}
TABLE(Payments) {
PK(payment_id) : INT
--
FK(order_id) : INT
payment_method : ENUM
transaction_id : VARCHAR(255)
amount : DECIMAL(10,2)
status : ENUM
processed_at : TIMESTAMP
}
Users ||--o{ Orders : places
Orders }o--|{ Users : belongs_to
Orders ||--|{ OrderItems : contains
OrderItems }o--|| Products : references
Products }o--|| Categories : categorized_in
Orders ||--o{ Payments : paid_by
note right of Users
Хранит учетные записи клиентов
и данные аутентификации
end note
note left of Orders
Основная запись транзакции
с деталями доставки
end note
@enduml
Шаблон 3: Визуализация инфраструктуры как кода
Пример кода (Mermaid):
graph TB
subgraph AWS["Инфраструктура облака AWS"]
direction TB
subgraph Networking["Сеть"]
VPC[VPC 10.0.0.0/16]
IGW[Шлюз интернета]
NAT[Шлюз NAT]
subgraph Public["Публичные подсети"]
ALB[Балансировщик нагрузки приложений]
Bastion[Хост-шлюз]
end
subgraph Private["Частные подсети"]
subgraph AppTier["Прикладной уровень"]
ECS1[Задача ECS 1]
ECS2[Задача ECS 2]
ECS3[Задача ECS 3]
end
subgraph DataTier["Уровень данных"]
RDS[RDS PostgreSQL<br/>Multi-AZ]
Redis[ElastiCache Redis]
end
end
end
subgraph Storage["Хранилище"]
S3[Бакеты S3<br/>Активы и резервные копии]
EFS[Общее хранилище EFS]
end
subgraph Security["Безопасность"]
WAF[Правила WAF]
SG[Группы безопасности]
IAM[Роли IAM]
end
subgraph Monitoring["Мониторинг и логирование"]
CW[CloudWatch]
XRay[AWS X-Ray]
SNS[Уведомления SNS]
end
end
User[Конечные пользователи] --> CloudFront[CloudFront CDN]
CloudFront --> WAF
WAF --> ALB
ALB --> ECS1
ALB --> ECS2
ALB --> ECS3
ECS1 --> RDS
ECS2 --> RDS
ECS3 --> RDS
ECS1 --> Redis
ECS2 --> Redis
ECS3 --> Redis
ECS1 --> S3
ECS2 --> S3
ECS3 --> S3
ECS1 --> EFS
ECS2 --> EFS
ECS3 --> EFS
ECS1 --> CW
ECS2 --> CW
ECS3 --> CW
RDS --> CW
Redis --> CW
CW --> SNS
style VPC fill:#f9f9f9,stroke:#333,stroke-width:2px
style ALB fill:#ff9900,stroke:#cc7a00,color:white
style RDS fill:#2e73b8,stroke:#1a4d80,color:white
style User fill:#95a5a6,stroke:#7f8c8d

Рисунок 6: Диаграмма архитектуры облачной инфраструктуры AWS
7. Продвинутые техники: Стилизация и кастомизация {#advanced-techniques}
Продвинутая стилизация Mermaid
Кастомизация темы:

%%{init: {'theme':'base', 'themeVariables': {
'primaryColor': '#4CAF50',
'primaryTextColor': '#fff',
'primaryBorderColor': '#388E3C',
'lineColor': '#757575',
'secondaryColor': '#FFC107',
'tertiaryColor': '#fff'
}}}%%
graph TD
A[Начало] --> B{Решение}
B -->|Да| C[Процесс A]
B -->|Нет| D[Процесс B]
C --> E[Конец]
D --> E
style A fill:#2196F3,stroke:#1976D2,color:white
style E fill:#F44336,stroke:#D32F2F,color:white
Параметры скина PlantUML
Профессиональное оформление:

@startuml
' Глобальное оформление
skinparam backgroundColor #FFFFFF
skinparam shadowing false
skinparam roundcorner 10
skinparam linetype ortho
' Оформление компонентов
skinparam component {
BackgroundColor #E3F2FD
BorderColor #1976D2
ArrowColor #1976D2
}
' Оформление пакетов
skinparam package {
BackgroundColor #FFF3E0
BorderColor #F57C00
FontSize 14
}
' Оформление заметок
skinparam note {
BackgroundColor #F1F8E9
BorderColor #689F38
FontColor #33691E
}
package "Frontend" {
component [React App]
component [Redux Store]
}
package "Backend" {
component [Node.js API]
component [Express Server]
database [MongoDB]
}
[React App] --> [Redux Store]
[Redux Store] --> [Node.js API]
[Node.js API] --> [Express Server]
[Express Server] --> [MongoDB]
note right of [Redux Store]
Централизованное управление состоянием
для всего приложения
end note
@enduml
Расширенные атрибуты Graphviz
Профессиональная сетевая диаграмма:

digraph AdvancedStyling {
// Глобальные атрибуты графа
graph [
bgcolor="#f8f9fa"
fontname="Helvetica"
fontsize=16
label="Архитектура корпоративной системыnПроизводственная среда"
labelloc="t"
pad=0.5
ranksep=1.5
nodesep=1.0
];
// Атрибуты узлов по умолчанию
node [
fontname="Helvetica"
fontsize=11
style="filled,rounded"
penwidth=2
];
// Атрибуты рёбер по умолчанию
edge [
fontname="Helvetica"
fontsize=9
penwidth=1.5
arrowsize=0.8
];
// Кластеры узлов с кастомным оформлением
subgraph cluster_presentation {
label="Слой представления";
style=filled;
color="#e3f2fd";
fontcolor="#1565c0";
Web [label="Веб-приложение<br/>React 18", fillcolor="#64b5f6", fontcolor="white"];
Mobile [label="Мобильное приложение<br/>Flutter", fillcolor="#64b5f6", fontcolor="white"];
}
subgraph cluster_business {
label="Слой бизнес-логики";
style=filled;
color="#fff3e0";
fontcolor="#e65100";
API [label="REST API<br/>Node.js", fillcolor="#ffb74d", fontcolor="black"];
GraphQL [label="GraphQL Gateway", fillcolor="#ffb74d", fontcolor="black"];
}
subgraph cluster_data {
label="Слой данных";
style=filled;
color="#e8f5e9";
fontcolor="#2e7d32";
Primary [label="Основная БД<br/>PostgreSQL 14", shape=cylinder, fillcolor="#a5d6a7"];
Replica [label="Реплика для чтения<br/>PostgreSQL 14", shape=cylinder, fillcolor="#c8e6c9"];
Cache [label="Кэш Redis<br/>Кластерный режим", shape=cylinder, fillcolor="#c8e6c9"];
}
// Рёбра с кастомным оформлением
Web -> API [label="HTTPS/REST", color="#1976d2", fontcolor="#1976d2"];
Mobile -> API [label="HTTPS/REST", color="#1976d2", fontcolor="#1976d2"];
Web -> GraphQL [label="WebSocket", color="#1976d2", fontcolor="#1976d2", style=dashed];
API -> Primary [label="Чтение/Запись", color="#388e3c", fontcolor="#388e3c"];
API -> Cache [label="Кэш", color="#f57c00", fontcolor="#f57c00", style=dashed];
GraphQL -> Replica [label="Только чтение", color="#388e3c", fontcolor="#388e3c"];
Primary -> Replica [label="Стриминговая репликация", color="#757575", style=dotted];
}
8. Рабочие процессы совместной работы и обмена {#collaboration}
Создание диаграмм для обмена
Пошаговый процесс обмена:
-
Создание ссылки для обмена:
-
Нажмите кнопку «Поделиться» в VPasCode
-
Скопируйте сгенерированный URL
-
Поделиться через электронную почту, Slack или документацию
-
-
Встроить в документацию:
## Архитектура системы  Или вставьте интерактивную версию: <iframe src="https://www.vpascode.com/embed/abc123xyz" width="100%" height="600"></iframe> -
Экспорт для презентаций:
-
SVG для масштабируемой веб-графики
-
PNG (300 DPI) для PowerPoint/Keynote
-
PDF для печатной документации
-
Интеграция с системой контроля версий
Храните код диаграмм в Git:
project-root/
├── docs/
│ ├── diagrams/
│ │ ├── architecture/
│ │ │ ├── system-overview.puml
│ │ │ ├── deployment-view.puml
│ │ │ └── data-flow.mmd
│ │ ├── processes/
│ │ │ └── user-journey.mmd
│ │ └── infrastructure/
│ │ └── aws-architecture.dot
│ └── README.md
└── src/
Пример рабочего процесса в Git:
# Создать диаграмму
echo '@startuml
component "API Gateway"
@enduml' > docs/diagrams/architecture/gateway.puml
# Закоммитить изменения
git add docs/diagrams/architecture/gateway.puml
git commit -m "Добавлена диаграмма архитектуры API Gateway"
git push
# Члены команды теперь могут просматривать в VPasCode
# путем вставки кода или загрузки по URL
Шаблоны командного взаимодействия
Шаблон 1: Записи об архитектурных решениях (ADRs)
# ADR-007: Шаблон взаимодействия микросервисов
## Контекст
Нам необходимо стандартизировать способ взаимодействия микросервисов.
## Решение
Использовать асинхронный обмен сообщениями через RabbitMQ для межсервисного взаимодействия.
## Схема архитектуры
```mermaid
graph LR
A[Сервис A] -->|Опубликовать| B[(RabbitMQ)]
B -->|Подписаться| C[Сервис B]
B -->|Подписаться| D[Сервис C]
Последствия
-
Улучшенная развязка компонентов
-
Лучшая масштабируемость
-
Дополнительная сложность в обработке сообщений
**Шаблон 2: Документация планирования спринта**
Создавайте динамические диаграммы, которые развиваются вместе со спринтом:

graph TD
subgraph Sprint24["Спринт 24 - В процессе"]
Done[✅ Выполненные задачи]
InProgress[🔄 В процессе]
ToDo[📋 К выполнению]
Blocked[⛔ Заблокировано]
end
Done --> Task1[Модуль авторизации пользователя]
Done --> Task2[Миграция базы данных]
InProgress --> Task3[Разработка API]
InProgress --> Task4[Интеграция фронтенда]
ToDo --> Task5[Модульное тестирование]
ToDo --> Task6[Документация]
Blocked --> Task7[Интеграция с сторонними сервисами]
style Done fill:#d4edda,stroke:#28a745
style InProgress fill:#fff3cd,stroke:#ffc107
style ToDo fill:#e2e3e5,stroke:#6c757d
style Blocked fill:#f8d7da,stroke:#dc3545
Заключение: Ваш путь к совершенству в документации
Поздравляем! Вы завершили комплексное путешествие по VPasCode и методологии «Диаграммы как код». Давайте подведем итоги того, что вы узнали, и определим ваш дальнейший путь.
Что вы освоили
В течение этого руководства вы узнали:
-
Сила текстовых диаграмм: Вы увидели, как написание кода для создания диаграмм устраняет неудобства ручного позиционирования, обеспечивает согласованность и делает документацию поддерживаемой.
-
Три отраслевых стандартных движка: Теперь у вас есть практические навыки в области:
-
Mermaid.js для удобных для разработчиков блок-схем и современной документации
-
PlantUML для диаграмм UML и архитектурных схем корпоративного уровня
-
Graphviz для визуализации сложных сетевых топологий и взаимосвязей
-
-
Реальные паттерны: От архитектуры микросервисов до схем баз данных, от конвейеров CI/CD до организационных диаграмм — вы научились визуализировать практически любую систему или процесс.
-
Рабочие процессы совместной работы: Вы понимаете, как делиться диаграммами по URL-адресам, встраивать их в документацию, интегрировать с системой контроля версий и автоматизировать их генерацию в конвейерах CI/CD.
-
Профессиональное оформление: Вы можете создавать визуализации издательского качества с использованием пользовательских тем, единого фирменного стиля и соответствующего уровня детализации для разных аудиторий.
Более широкая картина
То, что делает VPasCode по-настоящему трансформационным, — это не только сам инструмент, но и смена парадигмы, которую он представляет. Рассматривая диаграммы как код, вы:
-
Преодолевать разрыв между реализацией и документацией
-
Демократизировать архитектуру делая её доступной для каждого участника команды
-
Обеспечение долговечности знаний с помощью текстовых артефактов, находящихся под контролем версий
-
Ускорение адаптации благодаря чёткой, исполняемой документации
-
Снижение технического долга делая обновления такими же простыми, как редактирование текста
Ваши следующие шаги
Неделя 1: Начните с малого
-
Выберите одну существующую диаграмму в вашей организации
-
Воспроизведите её в VPasCode, используя предпочитаемый вами движок
-
Поделитесь ею с коллегой и соберите обратную связь
-
Сохраните код в репозитории вашего проекта
Недели 2–3: Набираем темп
-
Создайте шаблоны для распространённых типов диаграмм вашей команды
-
Установите соглашения об именовании и руководства по стилю
-
Включите проверку диаграмм в процесс рецензирования кода
-
Опишите ваш рабочий процесс «Диаграммы как код»
Месяц 2: Масштабируйте и автоматизируйте
-
Настройте интеграцию CI/CD для автоматической генерации диаграмм
-
Создайте библиотеку диаграмм для вашей организации
-
Обучите членов команды работе с этим процессом
-
Оцените сэкономленное время и улучшение качества документации
Месяц 3+: Внедрите это в культуру
-
Продвигайте подход «диаграммы как код» при принятии архитектурных решений
-
Делитесь историями успеха с руководством
-
Вносите шаблоны обратно в сообщество
-
Изучайте расширенные возможности, такие как генерация диаграмм с помощью ИИ
Конкурентное преимущество
Организации, освоившие подход «Диаграммы как код», получают значительные преимущества:
✅ Более быстрое принятие решений: Чёткие визуализации ускоряют понимание и согласование
✅ Сокращённое время адаптации: Новые инженеры быстрее понимают системы благодаря исполняемой документации
✅ Улучшенная коммуникация с заинтересованными сторонами: Профессиональные диаграммы связывают технические и бизнес-перспективы
✅ Сниженная нагрузка на поддержку: Обновление текста происходит быстрее, чем перерисовка визуалов
✅ Улучшение качества кода: Процесс создания диаграмм позволяет выявить архитектурные проблемы на ранних этапах
Присоединяйтесь к движению
Теперь вы являетесь частью растущего сообщества разработчиков, архитекторов и команд, которые понимают, что документация не должна быть обременением. С помощью VPasCode у вас есть инструменты, чтобы превратить её в актив — живое, динамичное представление вашей системы, которое развивается вместе с вашим кодом.
Заключительная мысль
Лучшее время для того, чтобы начать относиться к диаграммам как к коду, было вчера. Второе лучшее время — сейчас.
Ваше будущее «я» и ваши будущие коллеги поблагодарят вас за ясность, последовательность и уверенность, которые даёт документация, которая всегда актуальна, всегда доступна и всегда точна.
Готовы начать? Посетите VPasCode прямо сейчас, вставьте свой первый код диаграммы и наблюдайте, как текст превращается в ясность. Менее чем за время, потребное для прочтения этого заключения, вы создадите свой первый артефакт «Диаграмма как код».
Будущее технической документации уже здесь. Оно основано на коде, работает в браузере и полностью бесплатно. Добро пожаловать в революцию.
О данном руководстве
Это исчерпывающее руководство создано для помощи командам разработчиков в модернизации их практик документации с помощью подхода «Диаграмма как код». Основанный на двадцатилетнем опыте Visual Paradigm в области корпоративной архитектуры, VPasCode представляет собой будущее технической коммуникации — доступное, поддерживаемое и бесплатное.
Последнее обновление: июнь 2026 г.
Целевая аудитория: программисты, системные архитекторы, инженеры DevOps, технические писатели и команды разработки
Предварительные требования: базовое понимание концепций архитектуры программного обеспечения
Ориентировочное время выполнения: 2–3 часа для полного руководства, 15 минут для быстрого старта
Удачной работы с диаграммами! 🎨📊











