【发布时间】:2023-12-13 11:56:01
【问题描述】:
我遇到了以下代码:
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();
}
}
}
从上面的代码中看,sagas 似乎是某种更高级别的事件协调器/控制器。这是真的吗?如果是这样,它们是否仅用于事件驱动架构?最后,传奇是基础设施的一部分吗?
第一个问题似乎得到了回答。但就责任(即基础设施)而言,它们真正属于哪里?领域 ? .这些是否仅适用于 EDA?
【问题讨论】:
-
您所描述的是一个 ProcessManager,一个 Saga(根据其原始定义)由多个 ProcessManager 和每个步骤的补偿动作描述。但大多数时候,人们使用 Saga 来描述 ProcessManager。
标签: domain-driven-design nservicebus-sagas eda