← Назад к вопросам

Что такое статусная модель?

1.8 Middle🔥 131 комментариев
#Архитектура систем#Диаграммы и моделирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Статусная модель — жизненный цикл объекта в системе

Статусная модель (State Machine / Status Model) — это диаграмма, которая описывает все возможные состояния объекта (заказ, пользователь, документ) и переходы между ними. Она показывает, какие действия или события могут перевести объект из одного состояния в другое.

Основные компоненты статусной модели

1. Состояния (States)

  • Дискретные значения, в которых может находиться объект
  • Пример для заказа: Draft → Pending → Confirmed → Shipped → Delivered → Closed

2. Переходы (Transitions)

  • Связи между состояниями
  • Каждый переход имеет условие (событие, действие)
  • Пример: Pending → Confirmed (после подтверждения платежа)

3. События/Триггеры (Events)

  • Действия пользователя или системы, которые вызывают переход
  • Пример: Пользователь нажал "Оплатить"

4. Действия (Actions)

  • Что происходит при переходе
  • Пример: Отправить email клиенту

Пример: Статусная модель заказа

New (новый заказ)
  ↓ [Пользователь подтвердил]
Processing (в обработке)
  ├→ [Платеж принят] → Confirmed (подтверждён)
  │   ↓ [Готово к отправке]
  │   Shipped (отправлен)
  │   ↓ [Доставлено]
  │   Delivered (доставлен)
  │   ↓ [Пользователь закрыл]
  │   Closed (закрыт)
  │
  └→ [Платеж отклонен] → Cancelled (отменён)

На любом этапе: [Пользователь отменил] → Cancelled

Типы переходов

Обязательные переходы:

  • Все заказы должны пройти через определённый путь
  • Заказ обязательно попадёт в статус "Delivered"

Условные переходы:

  • Зависит от внешних факторов
  • Платёж либо принят, либо отклонен

Возвратные переходы:

  • Возврат на предыдущий статус
  • Rejected → Re-submission → Under Review

Для чего нужна статусная модель

1. Понимание бизнес-логики:

  • Разработчики видят все возможные состояния
  • Тестеры знают все переходы для проверки
  • Менеджеры отслеживают прогресс

2. Валидация:

  • Некоторые переходы запрещены
  • Например, заказ не может вернуться из Delivered в Processing

3. Разработка:

  • Подсказывает структуру БД (поле status)
  • Помогает написать логику в коде
  • Упрощает тестирование

4. Документирование:

  • Наглядное описание процесса
  • История объекта понятна всем

Пример в коде (Python)

from enum import Enum

class OrderStatus(Enum):
    NEW = "new"
    PROCESSING = "processing"
    CONFIRMED = "confirmed"
    SHIPPED = "shipped"
    DELIVERED = "delivered"
    CANCELLED = "cancelled"

class Order:
    def __init__(self):
        self.status = OrderStatus.NEW
    
    def confirm_payment(self):
        if self.status == OrderStatus.PROCESSING:
            self.status = OrderStatus.CONFIRMED
        else:
            raise ValueError(f"Cannot confirm from {self.status}")
    
    def ship(self):
        if self.status == OrderStatus.CONFIRMED:
            self.status = OrderStatus.SHIPPED
        else:
            raise ValueError(f"Cannot ship from {self.status}")
    
    def cancel(self):
        if self.status not in [OrderStatus.DELIVERED, OrderStatus.CLOSED]:
            self.status = OrderStatus.CANCELLED
        else:
            raise ValueError(f"Cannot cancel from {self.status}")

Лучшие практики

✓ Делай так:

  • Четко определи все состояния
  • Укажи условия для каждого перехода
  • Документируй исключительные случаи
  • Помни про откаты и отмены

✗ Избегай:

  • Слишком много состояний (больше 8-10)
  • Неясные условия переходов
  • Циклические зависимости
  • Недокументированные переходы

Статусная модель — это фундамент для правильной разработки и тестирования систем с состояниями.