订阅域名活动的位置

时间:2016-07-28 20:34:42

标签: domain-driven-design 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());

我试图决定是否喜欢在应用服务中发布事件的知识,或者我是否应该在根目录中将其外部化。

想法?

1 个答案:

答案 0 :(得分:3)

您通常会在Composition Root中注册处理程序,除非您必须根据其他消息动态注册和取消注册处理程序。

围绕此here

进行了一些讨论

您通常会在您的域层中发布域事件:

public void SomeDomainBehaviour()
{
    // do something domain-y
    DomainEvents.Publish(new DomainEvent());
}

Jimmy Bogard讨论了发布域名活动的其他方式here