界限上下文事件 - 存储消息协议的模块/项目
我们每个有界的上下文都有一个事件消息处理器,它将消息从相关上下文总线中取出,并通过内存总线在本地调度(Reactive Extensions,或https://github.com/flq/MemBus)。界限上下文事件 - 存储消息协议的模块/项目
在DDD书中,我读过它讨论如何将消息放在项目中的模块中,如mycompany.accounts.infrastructure.messages
和mycompany.ordering.infrastructure.messages
。
对于我有多个上下文的问题,引用这些消息将导致循环引用。
如何最好地组织不同限界上下文消息合约:
将各自界上下文必须包含所有可能的消息对于这方面,使其他的限界上下文可以引用一个单独的项目?
或者更好的办法是为所有将跨越上下文总线的消息设置单独的共享库?
我解决类似问题的建筑(至少)两个组装每个界上下文:
- 一为合同(事件,例外,共享标识等等...)
- 一个用于实体的实施。
这样,不同的有界上下文实现可以引用相同的契约,没有任何cicle。
编辑
至于命名约定,我通常命名界上下文的“惯用名称”之后组件,例如
- BankName.FinancialAdvisory的合同
- BankName.FinancialAdvisory。用于实现的POCO
- BankName.FinancialAdvisory.ORMOrOtherTechnologicalCouplingName当我需要专门化某些类以在特定技术环境中使用它们时。
然而,POCO组件内的根命名空间是相同的合同,一个(例如BankName.FinanicalAdvisory)的:这是因为波苏斯,表达在代码中的业务规则,没有任何技术的关注,具有相同开发活动周期的合同。相反,包含技术专业化的程序集使用等同于程序集名称的根名称空间(如BankName.FinancialAdvisory.ORMOrOtherTechnologicalCouplingName)。
尽管如此,与域相关的所有程序集都共享相同的名称空间结构:例如,如果名称空间“Funds”存在于BankName.FinancialAdvisory下,它同时存在于POCO和ORMOrOtherTechnologicalCouplingName中(如果它包含任何类,当然)。
谢谢 - 对命名空间的任何建议? – g18c 2013-03-27 11:11:27
刚刚编辑答案来解释我如何组织名称空间。 – 2013-03-27 11:49:56
只是为了回报我今天看到的,http://channel9.msdn。com/Blogs/Subscribe/DataContract-Coupling-in-Messaging非常有趣,不同的观点是我们对消息传递更加自由,而不是具体的合同类型 - 您的答案当然非常有用,它清楚地展示了如何链接项目有更紧密的耦合 – g18c 2013-03-30 14:20:33