Проектирование явных автоматов... Заметка
DEV Community на русском

Проектирование явных автоматов для движения денег

Платежные системы часто начинаются с простых столбцов статуса, таких как "в ожидании", "успешно" и "неудачно". По мере развития продуктов появляются более тонкие состояния, делающие поле статуса ненадежным. Явная машина состояний уточняет и обеспечивает соблюдение жизненного цикла платежа, гарантируя, что статусы отражают прогресс бизнеса. Полезные состояния должны указывать на знание системы и допустимые следующие действия, при этом переходы должны быть преднамеренными. Например, "в ожидании" подразумевает отсутствие обязательств, "обработка" означает активное выполнение, а "завершено" — удовлетворение обязательств. "Неудачно", "отменено" и "истекло" представляют собой неуспешные исходы или окончившиеся временные рамки действий, в то время как "спорно" приостанавливает обычные правила для расследования. Правила переходов должны находиться в доменном слое, при этом конечные точки запрашивают изменения состояния, а не напрямую назначают статусы. Терминальные состояния, такие как "завершено" или "отменено", требуют надежной защиты от повторного открытия из-за задержки событий. Побочные эффекты, такие как обновление реестров или уведомление клиентов, должны координироваться переходами для поддержания согласованности. Истечение срока действия должно управляться серверной частью как переход состояния, а не таймером пользовательского интерфейса. Фоновые рабочие процессы должны повторно проверять состояние перед истечением срока действия транзакций, чтобы избежать состояний гонки с поздними успехами. Связанные транзакции нуждаются в едином органе для управления их жизненным циклом и предотвращения дублирования действий. Сохранение значимых временных меток, помимо общего времени обновления, имеет решающее значение для операционной аналитики и разрешения споров. В конечном итоге статус транзакции должен отражать истину бизнеса, изменяясь только посредством именованных переходов, которые обеспечивают соблюдение предварительных условий и координируют эффекты.