【问题标题】:Can Entity Class be inherited from Value Object?实体类可以继承自值对象吗?
【发布时间】:2013-06-18 14:13:31
【问题描述】:

在我的业务领域中,实体“CompanyPrefix”似乎扩展了保留所有业务规则的 VO CompanyPrefixVO。没有其他班级会使用这个 VO。作为一个好的做法:

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

【问题讨论】:

    标签: domain-driven-design


    【解决方案1】:

    继承会导致很多问题,首先是高耦合和强依赖,这会阻碍你的领域模型的发展。我会改用组合。值对象可以是实体的一部分。

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

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

    【讨论】:

    • 谢谢@Dennis Traub。 CompanyPrefix 有自己的生命周期。公司可以有多个由不同身份提供者提供的公司前缀,这些前缀也可能随着时间的推移而过时。所以公司前缀显然是一个实体,尽管实体名称有点混乱。它实际上是全球唯一的公司标识符。我明白你关于继承的观点,但另一方面 company.companyPrefix.CompanyPrefixVO.value 对我来说有点奇怪。
    • 然后我会将两者合并到前缀中。除此之外,通过一个对象直接检索包含对象的属性被认为是不好的做法。包含对象通常会封装对内部对象的访问。谷歌“告诉不要问”或“得墨忒耳法则”了解更多信息。
    猜你喜欢
    • 2013-12-19
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多