【发布时间】:2015-03-17 00:02:28
【问题描述】:
我已经阅读了很多关于存储库模式的帖子,但有一些实际问题似乎没有解决或解释。这就是我对这两种模式的理解:
存储库和查询模式是互补的: 查询对象代表业务逻辑(WHERE 子句),存储库模式有一个 Get(IPredicate) 方法,该方法接受一个查询对象并返回一个 SELECT WHERE 结果
存储库不应有业务逻辑:所有业务逻辑都必须在查询对象上进行
目前我有一个包装每个逻辑对象(几乎总是一个实体对象)的类,它实现了多个“Get”方法,这些方法实现了最复杂的查询(joins、groupBy 等),这不是一个很好的模式,因为类往往会因为类似查询的样板代码而增长很多,并且它的公共方法依赖于该类将被使用的上下文,因此,使这些类无法用于依赖于同一数据库的多个项目,即我对这个项目进行重构的主要目标。
如何使用这两种模式实现比单个 SELECT WHERE 更复杂的查询,而不会将业务逻辑泄漏到存储库中?
或者,如果此业务逻辑不适合存储库或查询对象 这个逻辑在哪里合适?
【问题讨论】:
-
谢谢,这不是我的母语,我会更正问题
标签: c# sql entity-framework design-patterns