【问题标题】:Where to subscribe to domain events在哪里订阅域事件
【发布时间】:2016-07-28 20:34:41
【问题描述】:

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

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

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

想法?

【问题讨论】:

    标签: domain-driven-design domain-events


    【解决方案1】:

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

    围绕这个here有一些讨论

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

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

    Jimmy Bogard 讨论了发布领域事件的其他方式here

    【讨论】:

    • 谢谢你,我更喜欢返回/存储事件而不是静态发布者。
    • 吉米的文章很棒。我在那篇文章中采用了基于他的模式。我个人唯一的疑问是它允许多个聚合参与单个事务。我已经开始更多地选择最终一致性,如果您将 base.Save() 调用放在覆盖的开头然后调度您的事件,Jimmy 的文章仍然适用。也就是说,IMO,比异步调度更好的解决方案。处理程序可以异步执行,但我想知道是否无法亲自发布事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多