← Назад к вопросам
Что такое статусная модель?
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)
- Неясные условия переходов
- Циклические зависимости
- Недокументированные переходы
Статусная модель — это фундамент для правильной разработки и тестирования систем с состояниями.