2013-06-18 63 views
0

在我的业务领域中,一个实体“CompanyPrefix”似乎扩展了一个VO CompanyPrefixVO,它保留了所有业务规则。没有其他班会使用这个VO。作为一种良好实践:实体类是否可以从Value对象继承?

  1. 我应该从CompanyPrefixVO扩展CompanyPrefix吗?或
  2. 删除VO并将业务规则合并到实体CompanyPrefix中?或
  3. CompanyPrefix应该只与CompanyPrefixVO关联?或
  4. 有什么不同?

enter image description here

回答

1

继承会导致很多问题,首先是高耦合的,并有很强的依赖性可以从不断发展的阻碍你的域模型。我会用组合来代替。价值对象可以是实体的一部分。

这就是说我还会问几个问题:CompanyPrefix会是什么样的业务实体?它不只是名称或标识符的一部分吗?它是否有自己的生命周期,即它是否会随着时间的推移而改变其属性?为什么前缀需要一个ID?仅用于规范化(又名不属于域模型的数据库细节?)

我不知道您的具体情况,但可能只是代表公司前缀的VO作为公司的一部分。

+0

Thankyou @Dennis Traub。 CompanyPrefix有其自己的生命周期。公司可以拥有多个由不同身份提供商提供的公司前缀,这些提供商也可能随着时间的推移而过时。所以公司的前缀显然是一个实体,虽然实体名称有点混乱。它实际上是全球唯一的公司标识符。 我对继承有了一些看法,但另一方面,company.companyPrefix.CompanyPrefixVO.value对我来说有点奇怪。 – WSK

+0

然后,我会将两者合并到前缀中。除此之外,通过一个对象直接检索包含对象的属性被认为是不好的做法。包含对象通常会封装对内部对象的访问。谷歌“告诉别问”或“德米特法”了解更多信息。 –