Ситуация: Существует система создания заказов на исполнение тех или иных услуг (изготовление, покупка, доставка и т.д.).
Основная сущность "Заказ", которую создает "Заказчик" и публикует для того чтобы "Исполнители" могли подавать заявки на исполнение.
Заказ может иметь ряд различных состояний в которых накладываются различные бизнес требования, меняется список допустимых действий и т.п. условия.
Например:
- "Черноик" -> "Опубликован" -> "Прием заявок" -> "Окончание приема заявок" -> "Рассмотрение заявок (Выбор лучшей заявки)" -> "Заключение договора на исполнение Заказа" -> "Ожидание исполнения Заказа" -> "Оплата результата работы" -> "Завршен/Арив"
- "Черноик" -> "Опубликован" -> "Прием заявок" -> "Рассмотрение заявок (Выбор лучшей заявки)" -> "Окончание приема заявок" -> "Завршен/Арив"
- "Черноик" -> "Опубликован" -> ... -> "Отменен"
Ваша задача предложить архитектрное решение, которое позволит релизовать систему смены статусов, которую можно расширять, в зависимости от статуса накладывать те или иные требования доступа к данным, бизнес требования и производить соотвествующие действия при смене состояния