1

在我的应用程序服务中,我有以下用于发布域事件的代码:

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());

我正在尝试决定我是否喜欢在应用服务中拥有发布事件的这种知识,或者我是否应该将其外部化到根目录更高的某个地方。

想法?

4

1 回答 1

3

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

有一些关于这个here的讨论

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

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

Jimmy Bogard 在这里讨论发布领域事件的其他方式

于 2016-07-28T20:56:15.710 回答