我们的每个有界上下文都有一个事件消息处理器,它将消息从上下文总线中拉出,并通过内存总线本地发送(Reactive Extensions或https://github.com/flq/MemBus)。
在DDD书籍中,我已经阅读过有关将消息放入项目中的模块的讨论,例如mycompany.accounts.infrastructure.messages
和mycompany.ordering.infrastructure.messages
。
对于我有多个上下文的问题,引用这些消息会导致循环引用。
如何最好地组织不同的有界上下文消息合同:
每个有界上下文是否都有一个单独的项目,其中包含该上下文的所有可能消息,以便其他有界上下文可以引用?
或者,对于将通过上下文总线的所有消息分别使用共享库是否更好?
答案 0 :(得分:1)
我解决了为每个有界上下文构建(至少)两个程序集的类似问题:
这样,不同的有界上下文实现可以引用相同的契约,而不需要任何cicle。
修改强>
至于命名约定,我通常在有界上下文的“常规名称”之后命名程序集,例如
但是,在POCO程序集中,根名称空间与合同的名称空间相同(例如BankName.FinanicalAdvisory):这是因为在没有任何技术问题的情况下在代码中表达业务规则的POCO具有相同的开发实时循环合同。相反,包含技术专业的程序集使用的根命名空间等于程序集名称(例如BankName.FinancialAdvisory.ORMOrOtherTechnologicalCouplingName)。
然而,与域相关的所有程序集共享相同的命名空间结构:例如,如果BankName.FinancialAdvisory下存在名称空间“Funds”,它也存在于POCO和ORMOrOtherTechnologicalCouplingName中(当然,如果它包含任何类)。 / p>