在DDD中添加无处不在的语言?

时间:2011-12-30 19:03:26

标签: domain-driven-design

我在UML中快速定义了我的域模型(在纸上),当我开始测试驱动器功能时,重构使我进入了不在我的域中代表概念的小类,但这些类很好地封装了所需的责任。 / p>

例如,我开始使用具有许多许可证的机器(机器---> *许可证)。我开始使用方法Add(licenseType)和remove(licenseType)来增加或减少列表中相应的许可证对象(即许可证具有licenseType和该类型许可证数量的计数器)。

机器有其他关联和行为,所以我创建了一个LicenseTypeManager,我现在有了Machine ---> 1 LicenseTypeManager ---> * License。

我将Machine作为聚合根,将LicenseTypeManager作为Value对象,将License作为Value对象。

现在,LicenseTypeManager是我在重构时创建的,根本没有提到,并且不是应用程序无处不在的语言的一部分。它可以存在吗?

换句话说,使用UL建模是否合适,然后找到其他可能有助于更清楚地解释域名的术语?

此外,我开始认为LicenseTypeManager可能是域服务,但后来我开始担心我可能会创建一个贫血模型(尽管模型中仍有很多逻辑)。所以我的下一个问题是它应该是域名服务还是应该保留在原来的位置?

JD

1 个答案:

答案 0 :(得分:3)

无所谓导致普遍存在的语言的丰富无关紧要。但重要的是它无处不在。

所以 - 如果你对你的域进行建模并找出易于理解的新术语,那么只要领域专家理解它们,已经使用或开始使用它们就没有错。

想象一下,你正在销售汽车,对编程一无所知 Car type manager会对你有意义吗?不太可能。它也不应该存在于域中。

我认为:
  - 您不了解聚合根,实体和价值对象之间的区别   - 你缺乏OOP in general的知识(因此你通过引入“管理者”来寻求救赎)