Я не совсем уверен, что понимаю длительный процесс и что он должен делать.Возможно, поможет еще немного информации о функциональности.
Первое, что я заметил, было упоминание о IUnbookRentalMessage
.Прежде всего, не используйте I
в начале сообщений.Тот факт, что они могут быть интерфейсами, связан с полиморфизмом и множественными возможностями наследования .NET.Сами сообщения не имеют технического значения в сети, и поэтому вы не должны включать I
.
Кроме того, команды находятся в императивном времени и событиях в прошедшем времени ,Так что BookFlight
для команды и FlightBooked
для события.
Теоретически можно создать несколько саг, которые все участвуют в одном длительном бизнес-процессе.Сага под названием BookingPolicy
или BookingProcess
или BookingSaga
для организации всего процесса.И FlightBookingPolicy
для полета и HotelBookingPolicy
для отеля.
Если вы начинаете с команды BookFlight
, FlightBookingPolicy
может опубликовать событие под названием FlightBooked
.BookingPolicy
может использовать это событие для запуска своего собственного экземпляра саги.Так, например, веб-сайт (ASP.NET), который отправляет все команды, не должен знать о BookingPolicy
.Он просто отправляет соответствующие команды с соответствующими данными.То же самое касается отеля, автомобиля и т. Д.
Затем в какой-то момент веб-сайт отправляет команду CommitBooking
или FinishUpMyVacation
, которая действительно приходит в сагу BookingPolicy
иэто завершает весь заказ.Он отправляет событие BookingFinishingUp
или что-то.Исходя из этого события, какой-то обработчик может вычесть деньги из кредитной карты.Другой обработчик выполняет интеграцию с третьими сторонами для фактического предоставления отпуска.Другой обработчик рассылает электронные письма.Etcetera.
Наконец, когда BookingPolicy
(или даже другая сага ) закончена, сага BookingPolicy
опубликует событие под названием BookingFinished
и соответствующие FlightBookingPolicy
и HotelBookingPolicy
и CarBookingPolicy
также завершают и заканчивают свою работу.Что бы это ни было.
Имеет ли это смысл?Если вы хотите, вы также можете продолжить разговор по https://discuss.particular.net/ или support@particular.net.