使用框架事件调度器引发领域事件
Using framework event dispatcher to raise domain event
当我需要引发域事件时,我应该使用特定于框架的事件调度器还是创建我自己的由框架事件调度器实现的事件调度器?
由于该框架有一个非常好的事件调度器,并且 DDD 的术语表示领域层不应该依赖任何外部事物,所以我感到困惑。 :D
谢谢
这是一种设计选择。如果您想向事件调度程序添加额外的功能或希望很快这样做,请扩展。否则,如果您实现了那个确切的功能,只需使用 class。无需扩展 classes,一旦需要,您将始终能够这样做。
我所做的是让我的聚合记录在业务交易期间发生的事件列表,并在我的应用程序服务中发布事件,如下所示:
IDomainEventPublisher publisher = new DomainEventPublisher();
publisher
.SubscribeTo<ConsigneeCreated>()
.UsingDelegate(e =>
Console.WriteLine(string.Format("Consignee Id - {0}", e.ConsigneeId.ToString())));
publisher.Publish(consignee.ReleaseEvents());
最近我喜欢从域方法返回事件并在应用程序服务层处理这些事件。由于应用程序服务层是您汇集各种基础设施的地方,因此可以在应用程序服务层处理返回事件的进一步处理,例如调度。
通过这种方式,您无需使用调度程序单例或将对调度程序的任何引用传递到您的域。
当我需要引发域事件时,我应该使用特定于框架的事件调度器还是创建我自己的由框架事件调度器实现的事件调度器? 由于该框架有一个非常好的事件调度器,并且 DDD 的术语表示领域层不应该依赖任何外部事物,所以我感到困惑。 :D
谢谢
这是一种设计选择。如果您想向事件调度程序添加额外的功能或希望很快这样做,请扩展。否则,如果您实现了那个确切的功能,只需使用 class。无需扩展 classes,一旦需要,您将始终能够这样做。
我所做的是让我的聚合记录在业务交易期间发生的事件列表,并在我的应用程序服务中发布事件,如下所示:
IDomainEventPublisher publisher = new DomainEventPublisher();
publisher
.SubscribeTo<ConsigneeCreated>()
.UsingDelegate(e =>
Console.WriteLine(string.Format("Consignee Id - {0}", e.ConsigneeId.ToString())));
publisher.Publish(consignee.ReleaseEvents());
最近我喜欢从域方法返回事件并在应用程序服务层处理这些事件。由于应用程序服务层是您汇集各种基础设施的地方,因此可以在应用程序服务层处理返回事件的进一步处理,例如调度。
通过这种方式,您无需使用调度程序单例或将对调度程序的任何引用传递到您的域。