在哪里订阅域事件
Where to subscribe to domain events
在我的应用程序服务中,我有以下用于发布域事件的代码:
var document = await dbContext.Documents.GetAggregateAsync(message.DocumentId);
publisher.SubscribeTo<DocumentOwnerChanged>()
.UsingDelegate(
async a => await messageGateway.DocumentOwnerChanged(1, 1, 1));
document.ChangeOwner(message.OwnerId);
await dbContext.SaveChangesAsync();
await publisher.Publish(document.ReleaseEvents());
我正在尝试决定我是否喜欢在应用程序服务中了解发布事件的知识,或者我是否应该将其外部化到根目录中更高的地方。
想法?
您通常会在组合根中注册处理程序,除非您必须根据其他消息动态注册和注销处理程序。
对此有一些讨论
您通常会发布 域事件,通常在您的域层:
public void SomeDomainBehaviour()
{
// do something domain-y
DomainEvents.Publish(new DomainEvent());
}
Jimmy Bogard 讨论发布领域事件的其他方式here
在我的应用程序服务中,我有以下用于发布域事件的代码:
var document = await dbContext.Documents.GetAggregateAsync(message.DocumentId);
publisher.SubscribeTo<DocumentOwnerChanged>()
.UsingDelegate(
async a => await messageGateway.DocumentOwnerChanged(1, 1, 1));
document.ChangeOwner(message.OwnerId);
await dbContext.SaveChangesAsync();
await publisher.Publish(document.ReleaseEvents());
我正在尝试决定我是否喜欢在应用程序服务中了解发布事件的知识,或者我是否应该将其外部化到根目录中更高的地方。
想法?
您通常会在组合根中注册处理程序,除非您必须根据其他消息动态注册和注销处理程序。
对此有一些讨论
您通常会发布 域事件,通常在您的域层:
public void SomeDomainBehaviour()
{
// do something domain-y
DomainEvents.Publish(new DomainEvent());
}
Jimmy Bogard 讨论发布领域事件的其他方式here