5

替代文字 用 1;2;3 标记了我的聚合根。看起来很不错——几乎像葡萄。

替代文字

我不喜欢的是一个标有红色箭头的实体。

让我们想象一下:

  • AR #1 是公司
  • AR #2 是办公室
  • AR #3 是员工
  • 标有红色箭头的实体被命名Country
    • 公司制定从哪些国家/地区雇用员工的规则(在雇用时,company.Countries.Contains(employee.Country)必须是真实的)

我以某种方式看到了域中这个相当不重要的部分(也许在这个示例中听起来不像),并且我想避免将 Country 提升为聚合根。

关于聚合根的词汇表说:

对内部成员的瞬态引用只能在单个操作中使用。

那么 - 引入诸如“EmployeeCountry”之类的内容,删除对公司 Country 的引用并检查 Employee country 在招聘操作中是否与任何公司国家匹配听起来合理吗?

还有其他想法吗?

我怎样才能让我的葡萄看起来像他们应该的样子?

4

1 回答 1

7

在这种情况下Country,它只是一个值对象,而不是一个实体——更不用说聚合根了——所以没有理由改变你的设计(没有更多信息)。

此外,请注意,您引用的警告与聚合根的内部成员有关,而不是聚合本身。在多个地方维护对聚合的引用并没有错。聚合根应该封装子对象,以便在一个地方执行相关对象的业务规则。

您可以在 Evans 的“领域驱动设计”(又名“蓝皮书”)的几个地方清楚地看到这一点。例如,请参见第 127 页上的图表(在聚合根的介绍中),该图显示了一个 Car 聚合,该聚合具有对 Engine 聚合的引用。

于 2010-08-20T16:53:11.363 回答