Pepelen
← Системный анализ: API, интеграции и данные

Урок

Диаграмма состояний: жизненный цикл заказа

Описать жизненный цикл заказа диаграммой состояний — состояния, переходы, события и условия — и вывести из неё правила API: что разрешено в каком статусе и что вернуть при запрещённом переходе.

1 / 7

Статусы и переходы

Жизненный цикл заказа

Диаграмма состояний (UML 2.5.1) описывает жизнь одного объекта — у нас заказа. Состояние — устойчивая ситуация: заказ оплачен, заказ в сборке. Переход — стрелка между состояниями с подписью «событие [условие] / действие», например «отмена [до передачи курьеру] / запросить возврат». Условие в квадратных скобках называют сторожевым (guard): пока оно ложно, переход не срабатывает. Начальное состояние — закрашенный кружок, конечное — кружок в кольце. У заказа «Ромашки» шесть статусов: created (создан), paid (оплачен), assembling (в сборке), in_delivery (в доставке), delivered (доставлен), cancelled (отменён). Конечные — delivered и cancelled. Возврат после доставки — отдельный процесс, на этой диаграмме его нет. Все переходы и кто их запускает — в таблице ниже. Что диаграмма даёт аналитику: • список разрешённых переходов — готовые правила для API и проверок данных; • всё, чего нет на диаграмме, запрещено: обратного хода delivered → paid не бывает, а отмену в in_delivery контракт отклоняет кодом 409 Conflict с текущим статусом в теле ошибки; • каждый переход публикует событие-факт: OrderPaid, OrderCancelled. Бывают события и без смены статуса: OrderReadyForPickup — заказ собран и ждёт курьера. Повторная отмена уже отменённого заказа — не переход, а повтор: 200 с тем же заказом, без второго возврата. 409 — для in_delivery и delivered. Статус называет ситуацию, а не команду: paid, а не pay. И он точен настолько, чтобы на нём держались правила: по in_delivery видно, что заказ у курьера, а по общему in_progress — нет.
Таблица переходов
ИзСобытие [условие] / действиеВ
createdоплата прошла (webhook провайдера)paid
createdоплата отклонена или отмена клиентомcancelled
paidмагазин принял заказassembling
paidотмена клиентом / возврат денегcancelled
assemblingкурьер забрал заказin_delivery
assemblingотмена клиентом или магазином [до передачи курьеру] / возврат денегcancelled
in_deliveryкурьер вручил заказdelivered
Конспект урока
Жизненный цикл заказа
Диаграмма состояний (UML 2.5.1) описывает жизнь одного объекта — у нас заказа. Состояние — устойчивая ситуация: заказ оплачен, заказ в сборке. Переход — стрелка между состояниями с подписью «событие [условие] / действие», например «отмена [до передачи курьеру] / запросить возврат». Условие в квадратных скобках называют сторожевым (guard): пока оно ложно, переход не срабатывает. Начальное состояние — закрашенный кружок, конечное — кружок в кольце. У заказа «Ромашки» шесть статусов: created (создан), paid (оплачен), assembling (в сборке), in_delivery (в доставке), delivered (доставлен), cancelled (отменён). Конечные — delivered и cancelled. Возврат после доставки — отдельный процесс, на этой диаграмме его нет. Все переходы и кто их запускает — в таблице ниже. Что диаграмма даёт аналитику: • список разрешённых переходов — готовые правила для API и проверок данных; • всё, чего нет на диаграмме, запрещено: обратного хода delivered → paid не бывает, а отмену в in_delivery контракт отклоняет кодом 409 Conflict с текущим статусом в теле ошибки; • каждый переход публикует событие-факт: OrderPaid, OrderCancelled. Бывают события и без смены статуса: OrderReadyForPickup — заказ собран и ждёт курьера. Повторная отмена уже отменённого заказа — не переход, а повтор: 200 с тем же заказом, без второго возврата. 409 — для in_delivery и delivered. Статус называет ситуацию, а не команду: paid, а не pay. И он точен настолько, чтобы на нём держались правила: по in_delivery видно, что заказ у курьера, а по общему in_progress — нет.