我一直在阅读域事件,并看过Udi实施的代码(http://www.udidahan.com/2009/06/14/domain-events-salvation/) ,Mike Hadlow(http://mikehadlow.blogspot.com/2010/09/separation-of-concerns-with-domain.html),Jimmy Bogard和Jason Dentler的实施。
总而言之,我喜欢事件的想法。
我的问题是我应该在哪一层添加这些组件。
我不会使用任何总线,所有事件都将以同步方式处理。
我想接口IDomainEvent,IEventHandler应该进入 Project.Core ,其中所有项目都保留并访问其余接口。
Dispatcher(这是一个静态类)我认为应该进入 Project.Infrastructure 。
我将为域事件处理程序创建一个新项目。让我们说 Project.EventHandlers 。
我将使用IoC(结构图)来注册所有处理程序。
我看到的事件本身基于商业语言,因此我认为应该转到 Project.Domain ,其中所有聚合都已实现。
请告诉我这是否正确。
我的另一个困惑是项目参考。应该 Project.Domain 引用 Project.Infrastructure ,以便它可以使用静态事件调度程序。
Project.EventHandlers 应该引用 Project.Domain ,因为它需要知道哪些事件可以处理。
我计划在 Project.EventHandlers 中创建一个StructureMap注册表类,然后在Global.asax中使用BootStrapped。
如果之前已经讨论过,请指向我的链接。我无法通过谷歌搜索找到一个。
答案 0 :(得分:2)
这些项目或名称空间是?有关细粒度的粗粒度项目结构的古老而持续的争论。我在粗粒营地。程序集是部署的一个单元,而不是逻辑层,您描述的结构最好在单个项目中作为名称空间实现。
话虽如此,您的组织看起来很明智。我唯一的改变是将接口放在它们的实现上,而不是放在Project.Core中。