.net 存储库模式:复杂方法去哪里?

.net 存储库模式:复杂方法去哪里?,.net,entity-framework-core,repository-pattern,.net,Entity Framework Core,Repository Pattern,我非常确定我已经很好地理解了如何实现存储库模式,但是我陷入了一个关于复杂查询/方法的决策循环中 如果我想获取所有用户或在用户表上具有某个字段值的用户,很明显这将进入用户存储库。但是,如果我有一个更复杂的查询,比如所有完成视频课程的用户,视频课程都是这样的类型,该怎么办?在我的模型中,这个查询跨越大约6个表 我希望能够为我们提供一个存储库来执行类似if(user.completedVideoRequirement)的操作,但我很难说服自己,用户存储库就是实现这一点的地方。这对我来说似乎是对的,但我

我非常确定我已经很好地理解了如何实现存储库模式,但是我陷入了一个关于复杂查询/方法的决策循环中

如果我想获取所有用户或在用户表上具有某个字段值的用户,很明显这将进入用户存储库。但是,如果我有一个更复杂的查询,比如所有完成视频课程的用户,视频课程都是这样的类型,该怎么办?在我的模型中,这个查询跨越大约6个表

我希望能够为我们提供一个存储库来执行类似if(user.completedVideoRequirement)的操作,但我很难说服自己,用户存储库就是实现这一点的地方。这对我来说似乎是对的,但我可以很容易地说服自己摆脱它

正确的方法是什么

编辑:如果我返回的信息不是数据库实体(即返回true/false或其他int),该怎么办。这应该发生在存储库级别,还是应该改为执行if(users.CompletedVideoRequirement.Any())之类的操作? 我想这对我来说还是有意义的,因为它是关于用户的信息,但从技术上讲,它也是关于视频的信息。

我的思维过程是“我在返回什么”?因为这里的答案是“用户”,所以UserRepository确实是正确的回购协议。
为了利用数据库的查询优化,您可能有一百种不同的方法来过滤用户,这些方法都会放在UserRepo中。(好吧,一百块可能太多了)


无论何时您需要一个用户或一组用户,您都应该能够转到UserRepository获取它。这就是它在生活中的目的,无论你需要什么,它都会过滤你的用户。

你在使用ef吗?如果是,那么您应该有一个包含系统中所有表的上下文。如果是,则可以从一个具有该上下文的存储库中访问任何表。有什么问题吗?我接受了你的答案,因为它完美地回答了问题的原始措辞。此外,我认为它将适用于编辑版本。我对这个问题进行了编辑,以包括不将数据库对象作为结果返回的方法(即t/f、int)