【发布时间】:2013-05-11 22:10:04
【问题描述】:
我希望拥有一个或多个可重用类库,这些库基本上是值对象,例如 Address、PhoneNumber、EmailAdress,主要包含属性和一些支持方法。我的领域层如何在不违反领域层不应包含外部引用的规则的情况下使用这些,并且不将它们定义为领域层中的接口/抽象类?
【问题讨论】:
标签: domain-driven-design value-objects
我希望拥有一个或多个可重用类库,这些库基本上是值对象,例如 Address、PhoneNumber、EmailAdress,主要包含属性和一些支持方法。我的领域层如何在不违反领域层不应包含外部引用的规则的情况下使用这些,并且不将它们定义为领域层中的接口/抽象类?
【问题讨论】:
标签: domain-driven-design value-objects
...不违反域层不应包含外部引用的规则
我认为您对“外部参考”的定义需要重新评估。很难想象一个不引用任何东西的领域层。在 C# 和 Java 中,您将至少引用基本的数字类型、日期和字符串。我也认为引用 Noda/Joda time 等外部库没有任何害处。另一方面,您当然不想引用任何繁重的技术库,例如持久性、通信、UI 等。
所以我想说您可以构建自己的从域引用的可重用库,但这需要非常仔细的考虑,并且通常不值得它创建的耦合。我会为每种类型使用以下标准:
【讨论】:
我认为您所指的是共享内核。
共享内核——这是两个团队共享部分内核的地方 域模型。这不应该在没有其他团队的情况下改变 咨询过。
虽然这看起来不错,但由于我们习惯于不重复自己,请注意其中的陷阱:
【讨论】:
稳定性是双向的。如果您将一个实体拉出到每个域中,那么任何更改都必须跨多个项目执行。如果您不这样做,则必须在多个域之间协调更改。前者的后勤工作比后者容易,但后者涉及的工作量可能更大。无论哪种方式,您都必须在每个平台上测试更改。
除非实体成熟并具有相对明确定义的语义,否则我的经验是几乎所有内容都会发生变化。所以稳定性很好,但可能有点红鲱鱼。
话虽如此,我喜欢(和 +1)@Dmitry。
【讨论】: