【问题标题】:Is sort value a valid domain property?排序值是有效的域属性吗?
【发布时间】:2019-09-21 22:34:39
【问题描述】:

背景

我正在构建一个显示垂直项目列表的应用程序(想象一下文件浏览器应用程序)。项目类型可以是文件夹,在这种情况下,文件夹可以有任意数量的子项目/文件夹,允许用户创建/导航层次结构,同样类似于文件系统。用户可以手动拖放项目以随意对项目进行排序,而不是按字母顺序(等)排序项目。因此,每个项目都有一个整数类型的排序/位置属性,用于跟踪项目相对于当前文件夹中其他项目的位置。至少,视图模型目前是这样。

问题

项的排序/位置属性是否属于项的域对象的属性?

排序值对单个项目本身没有意义。这里奇怪的概念是文件夹项目的递归/分层性质。文件夹类型项可能负责确保直接子项排序值有效(顺序/无间隙/无重叠),并负责更改这些子项的排序顺序。

但这是正确的吗?排序顺序似乎是与显示相关的问题。是否应该提供一种服务,该服务采用无排序域实体并将排序/位置属性应用于这些项目,因为它们在显示之前转换为视图模型?

【问题讨论】:

    标签: java android domain-driven-design


    【解决方案1】:

    聚合是一致性边界。所有业务规则都应保留在该一致性边界内。将 SortOrder 放入您的 Item Aggregate 将意味着您无法确保您声明的规则得到遵守,但如果您放宽规则,那么您可以将 SortOrder 放在这里。具体来说,如果您删除了 SortOrder 需要严格按顺序排列的约束,那么您可以忍受差距。

    如果您将 SortOrder 放在文件夹聚合中,那么您可以维护您建议的规则,但那里也有成本吗?如果项目被删除或移动到不同的文件夹怎么办?父文件夹如何得到通知?它如何回应?您是否删除该项目并重新订购?

    通过这种方式,答案取决于哪些情况更有可能发生,以及规则是否真的如您所说的那样,或者您是否出于简化实施的目的而对它们灵活处理。

    【讨论】:

      猜你喜欢
      • 2019-09-05
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多