я наткнулся на следующий код:Что такое саги и почему они используют архитектуры, управляемые событиями?
public class ShippingSaga : Saga<ShippingSagaData>,
ISagaStartedBy<OrderAccepted>,
ISagaStartedBy<CustomerBilledForOrder>
{
public void Handle(CustomerBilledForOrder message)
{
this.Data.CustomerHasBeenBilled = true;
this.Data.CustomerId = message.CustomerId;
this.Data.OrderId = message.OrderId;
this.CompleteIfPossible();
}
public void Handle(OrderAccepted message)
{
this.Data.ProductIdsInOrder = message.ProductIdsInOrder;
this.Data.CustomerId = message.CustomerId;
this.Data.OrderId = message.OrderId;
this.CompleteIfPossible();
}
private void CompleteIfPossible()
{
if (this.Data.ProductIdsInOrder != null && this.Data.CustomerHasBeenBilled)
{
this.Bus.Send<ShipOrderToCustomer>(
(m =>
{
m.CustomerId = this.Data.CustomerId;
m.OrderId = this.Data.OrderId;
m.ProductIdsInOrder = this.Data.ProductIdsInOrder;
}
));
this.MarkAsComplete();
}
}
}
По внешнему виду вещей в приведенном выше коде саг, кажется, какой-то более высокий уровень координатор/контроллер событий. Это правда? Если да, используются ли они только в управляемых событиями архитектурах? И наконец, являются ли саги части ИНФРАСТРУКТУРЫ?
первый запрос похоже ответ. но где они действительно относятся к ответственности, то есть к инфраструктуре? Домен ? , применимы ли они только к EDA?
Возможный дубликат [CQRS sagas - я понял их правильно?] (Http: // stackoverflow.com/questions/13489829/cqrs-sagas-did-i-understand-them-right) – jlvaquero
То, что вы описываете, является ProcessManager, Saga (по его первоначальному определению) описывается несколькими ProcessManager и действиями по компенсации для каждого шага. Однако большую часть времени люди используют Saga для описания ProcessManager. –