【问题标题】:Aggregate invariants聚合不变量
【发布时间】:2021-05-19 13:32:11
【问题描述】:

我怀疑应该在哪里检查我的不变量...

例如,我有一个具有以下不变量的 Question 聚合:

  • 问题的文本不能为空
  • 问题的文本长度必须在 100 到 500 个字符之间

我读过检查不变量的最佳位置是在聚合的构造函数中,但我也读过建议将域逻辑推送到值对象中。

一个可能的聚合实现可能是:

public class Question {
  private final id: QuestionId;
  private final text: QuestionText

  public Question(id: String, text: String) {
    // verify invariants
    ensureLengthText(text); // this method verifies the invariant    

    this.id = new QuestionId(id);
    this.text = new QuestionText(text);
  }
} 

QuestionIdQuestionText 是值对象。

在这种情况下,总的来说,我们可以明确地看到不变量。

但是,如果我们在 QuestionText 值对象中推送该不变逻辑,总的来说我们将看不到该不变式......那么,最好的方法是什么?

【问题讨论】:

    标签: domain-driven-design value-objects


    【解决方案1】:

    如果您可以轻松地在值对象中强制执行不变量(例如“问题文本不能短于 100 个字符或长于 500 个字符”),我建议您这样做。 Question 通过说 textQuestionText 继承了该不变量(以及来自 QuestionText 的任何和所有其他变量)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2014-04-16
      • 2018-06-24
      相关资源
      最近更新 更多