3

我从我的存储库中获得了一个项目列表。现在我需要对它们进行排序和过滤,我相信这会在存储库中完成以提高效率。我认为以 DDD 方式执行此操作有两种方法:

  1. 向 Repository 发送一个过滤器和一个充满条件的排序对象(这叫什么)?
  2. 存储库结果会产生一个带有 .filter 和 .sort 方法的对象?(这不会是 POJO/POCO,因为它包含多个对象?)。

那么答案是 1、2 还是其他?你能解释一下为什么吗?我倾向于#1,因为存储库只能发送我想要的数据(或者#2 能够延迟访问像 LazyList 这样的数据?)代码示例(或网站链接)将非常有帮助。

例子:

  1. 产品 product = repo.GetProducts(mySortObject, myFilterObject); // Poco 列表
  2. product.AddFilter("price", "lessThan", "3.99"); product.AddSort("价格", "降序");
4

2 回答 2

2

这不是一个完整的答案,但您可能想看看 CQRS(命令查询责任分离)背后的一些想法(可以在此处找到一些好的链接)。

CQRS 是一种思考 DDD 的方式,可以帮助澄清其中的一些问题。它比您的具体问题更高,但它可能会有所帮助。

从本质上讲,我认为它只会帮助您决定选择您的第一个选项(这是我在类似情况下的最终结果)。我们称它为查询对象。

于 2010-03-15T10:19:45.633 回答
2

我个人会选择你的第一个选择。

如果您从 DDD 的角度考虑第二个选项,产品对象(我假设它是您的域对象)具有关于您正在尝试解决的业务问题的一部分的知识(IE,您的域)。而是在用户界面或其他一些后端处理组件中使用排序和过滤。

此外,当从单一职责(又名 SOLID)的角度查看第二个选项时,您会看到您的Product业务对象负责排序和过滤,这与产品完全无关。

这就是我看待事物的方式。我会对其他人的意见感兴趣。

于 2010-03-15T07:45:38.230 回答