DDD:将域拆分为不同程序集中的子域

时间:2013-12-12 12:04:49

标签: c# domain-driven-design

我有一个包含2个子域的域名。

每个子域都包含对另一个子域的依赖。

我想将每个子域放入一个单独的程序集中(我想把它分成1st:vertical 2nd: horizontal modules => easy reusability)。

问题是:

如何管理不同sub domains之间的依赖关系(每个{1}}都放在一个单独的程序集中

我是在正确的道路上吗?

2 个答案:

答案 0 :(得分:3)

域名的一个重要属性是您的域名不应该依赖其他任何内容。 如果您说您的域依赖于某些其他域,则可能需要进行更多分析,并且当前识别的边界是错误的。

域名只能用自己的语言说话!不是在其他领域(因为它不关心它们),不是在外部合同/消息方面(因为它们可能会改变)等等。

这里可能缺少的是有界上下文。如果在开始优化域之前系统中没有识别出有界上下文,则会出现类似的问题。

我建议你从头开始:

  1. 识别系统中的有界上下文。根据定义,它们彼此独立
  2. 每个有界上下文都有自己的域(如果以这种方式实现,这是不必要的)。这个域名不知道它自己以外的任何东西" bubble"并且绝对不知道其他领域是否存在。
  3. 当不同的BC需要相互通信时,请确定合同。 BC(不提及他们的域名)不应该依赖或相互引用,或者使用彼此的类型。相反,他们依赖于合同
  4. 合同通常是消息(但有些人做其他事情,不时会伤害他们)
  5. 反腐败层可以在BC边界上实施。它完全是为了保护BC(及其域)免受来自外部的东西的影响。 ACL工作是将事物从外部(外部事件,消息,调用等)转换为域可以理解的内容。
  6. 同样,域名只能用自己的语言说话!不是在其他领域(因为它不关心它们),而不是外部合同/消息(因为它们可能会改变)等等。
  7. 希望它有所帮助。

答案 1 :(得分:1)

您的子域是否为有界上下文(BC)?

如果没有真正的域,这取决于并且很难帮助你,但是不同的BC应该在不同的程序集中进行物理分离。在一个上下文中,我们不会引用另一个...... BC是自治组件。上下文之间的通信应该是理想的异步。