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?