DDD:尝试使用 C# 对与 Poco、Repository、DTO 和 DAO 相关的代码排序和过滤?

Posted

技术标签:

【中文标题】DDD:尝试使用 C# 对与 Poco、Repository、DTO 和 DAO 相关的代码排序和过滤?【英文标题】:DDD: Trying to code sorting and filtering as it pertains to Poco, Repository, DTO, and DAO using C#? 【发布时间】:2011-01-27 13:51:04 【问题描述】:

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

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

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

例子:

    产品 product = repo.GetProducts(mySortObject, myFilterObject); // Poco 列表 product.AddFilter("price", "lessThan", "3.99"); product.AddSort("price", "descending");

【问题讨论】:

【参考方案1】:

我个人会选择您的第一个选项。

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

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

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

【讨论】:

【参考方案2】:

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

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

基本上我认为它只会帮助你决定选择你的第一个选项(这是我在类似情况下最终得到的)。我们称之为查询对象。

【讨论】:

我终于买了“POEAA”,这样我就可以了解查询对象了。

以上是关于DDD:尝试使用 C# 对与 Poco、Repository、DTO 和 DAO 相关的代码排序和过滤?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JsonConvert.DeserializeObject 将 Json 反序列化为 C# POCO 类

在 C# 中,如何使用大量精美的标记将 POCO 序列化为 XML?

将POCO与mongodb c#驱动程序一起使用时如何管理_id字段

C# 9 record 并非简单属性 POCO 的语法糖

c# WCF 与 POCO DataContract

指定的 LINQ 表达式包含对与 c# 中的不同上下文错误关联的查询的引用