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

Moh*_*sen 1 c# domain-driven-design

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

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

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

问题是:

我如何管理不同的依赖项sub domains(每个依赖项都放在一个单独的程序集中)

我在正确的道路上吗?

Ale*_*aga 6

域的一个重要属性是您的域不应依赖于其他任何东西。如果您说您的域依赖于其他某个域,那么可能需要更多的分析并且当前识别的边界是错误的。

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

这里可能缺少的是有界上下文。当系统中在开始细化域之前没有识别出有界上下文时,经常会出现这样的问题。

我建议你从头开始:

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

希望能帮助到你。