Диаграммы классов Mermaid

Диаграммы классов описывают структуру системы: сущности (классы), их атрибуты, методы и отношения между ними. Они полезны для документирования структуры данных, схем API и архитектуры приложения.

Базовый синтаксис

classDiagram
    class Task {
        +String id
        +String title
        +String status
        +Date createdAt
        +assign(userId: String)
        +complete()
    }

Базовая диаграмма классов

Атрибуты и методы

Модификаторы доступа

СимволДоступ
+public
-private
#protected
~package/internal
classDiagram
    class User {
        +String id
        +String email
        -String passwordHash
        #String tenantId
        +getProfile() Profile
        -hashPassword(plain: String) String
        #checkPermission(action: String) bool
    }

Типизация

Тип указывается перед именем, возвращаемый тип — через TypeName:

classDiagram
    class Repository {
        +findById(id: String) Task
        +findAll(filter: Filter) Task[]
        +create(data: CreateDTO) Task
        +update(id: String, data: UpdateDTO) Task
        +delete(id: String) void
    }

Абстрактные и статические члены

classDiagram
    class BaseRepository {
        <<abstract>>
        +findById(id: String)*
        +findAll()*
        $create(data)*
    }

* — абстрактный метод, $ — статический.

Отношения

СинтаксисТип отношения
`A —> B`
`A ..> B`
A --> BАссоциация
A --* BКомпозиция
A --o BАгрегация
A .. BЗависимость
classDiagram
    Animal <|-- Dog
    Animal <|-- Cat
    Animal : +String name
    Animal : +makeSound()*

    class Dog {
        +String breed
        +makeSound()
    }

    class Cat {
        +bool isIndoor
        +makeSound()
    }

Диаграмма наследования классов

Кардинальность

classDiagram
    Project "1" --> "many" Task : содержит
    Task "many" --> "1" User : назначена
    User "1" --> "many" Project : участвует

Интерфейсы и перечисления

classDiagram
    class Serializable {
        <<interface>>
        +serialize() String
        +deserialize(data: String)
    }

    class TaskStatus {
        <<enumeration>>
        BACKLOG
        IN_PROGRESS
        REVIEW
        DONE
    }

    class Task {
        +TaskStatus status
        +serialize() String
        +deserialize(data: String)
    }

    Serializable <|.. Task
    Task --> TaskStatus

Аннотации (стереотипы)

classDiagram
    class UserController {
        <<Controller>>
        +createUser(req: Request) Response
        +getUser(id: String) Response
    }

    class UserService {
        <<Service>>
        +createUser(data: CreateDTO) User
        +findById(id: String) User
    }

    class UserRepository {
        <<Repository>>
        +save(user: User) User
        +findById(id: String) User
    }

    UserController --> UserService
    UserService --> UserRepository

Пример: архитектура FlowEra

classDiagram
    class Flow {
        +String id
        +String name
        +String tenantId
        +String statusModelId
        +createTask(data: CreateTaskDTO) Task
        +getTasks(filter: Filter) Task[]
    }

    class Task {
        +String id
        +String flowId
        +String title
        +String status
        +Properties properties
        +assign(userId: String)
        +updateStatus(status: String)
    }

    class StatusModel {
        +String id
        +String name
        +StatusDef[] statuses
        +getStatus(label: String) StatusDef
        +isValidTransition(from: String, to: String) bool
    }

    class StatusDef {
        +String label
        +String category
        +String color
    }

    class FieldTemplate {
        +String id
        +String flowId
        +String name
        +FieldType type
        +bool required
        +validate(value: any) bool
    }

    Flow "1" --* "many" Task : содержит
    Flow --> StatusModel : использует
    StatusModel "1" --* "many" StatusDef
    Flow "1" --> "many" FieldTemplate : определяет

Архитектура FlowEra на диаграмме классов