我应该从DDD

时间:2017-02-09 07:42:04

标签: asp.net-core domain-driven-design asp.net-core-mvc repository-pattern

最近,我正在重构我的DDD项目。当我查看我的存储库层时。我发现它返回IQueryable< T>在我的存储库中。我很困惑,我应该退回IQueryable< T>从存储库层中的DDD项目中的存储库?我通常在我的Repository设计中返回IQueryable类型。但今天我发现了一个相反的想法article 我无法解决这个问题!

2 个答案:

答案 0 :(得分:5)

如果您返回FixedJoint,则允许从域层泄漏到消费者层的域知识。它会增加Domain对象变得贫血的风险,并且所有行为都会移动到其他层。

虽然它能够很方便地返回IQueryable并且您认为您的代码变得更简单,但这只是一种幻觉;当项目增长时,IQueryable会将您的代码转换为泥泞的大球,域代码分散在每个地方。您将无法优化存储库或更改一个持久性与另一个(即从sql到nosql)。

答案 1 :(得分:1)

你可能不应该这样做。

存储库的工作不仅要抽象出持久性细节,还要提供一个explicit query contract来定义处理域中命令 1 所需的那些。< / p>

如果您觉得需要进一步过滤/转换从您的存储库返回的内容,那么您很可能无法捕获应该成为存储库合同一部分的显式查询。

拥有此类合同可以让查询客户表达他们的意图并允许更容易的优化。

1。如今,应用一些CQRS原则并将域模型完全用于查询是很常见的。在这种情况下,将通过存储库的唯一查询是处理命令所需的查询。但是,您不会以任何方式使用此方法,因此如果您愿意,您的存储库也可以完成报告查询。