存储库模式:复杂方法在哪里?

时间:2017-10-16 14:27:06

标签: .net entity-framework-core repository-pattern

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

如果我想让所有在用户表上具有特定字段值的用户或用户,那么很明显它将会出现在用户存储库中。但是,如果我有一个更复杂的查询 - 例如所有用户已完成视频课程属于这种类型的视频课程,该怎么办?在我的模型中,这个查询跨越了大约6个表。

我希望能够在我们的存储库中执行类似if(user.completedVideoRequirement)的操作,但是我很难说服自己用户存储库就是这个地方。这对我来说似乎是正确的,但我可以很容易地争辩自己。

什么是正确的方式?

编辑:如果我返回数据库实体以外的信息(即返回true / false或其他一些int),该怎么办?这应该发生在存储库级别,还是应该像if(users.CompletedVideoRequirement.Any())那样做? 我想这对我来说仍然有用,因为它有关用户的信息,但从技术上讲,它也是关于视频的信息。

1 个答案:

答案 0 :(得分:1)

我的思维过程是“我要回来的是什么”?由于这里的答案是“用户”,因此UserRepository确实是正确的回购 为了利用数据库的查询优化,您可能有一百种不同的方法来过滤用户,这些方法都会在UserRepo中进行。 (好一百可能有点矫枉过正)

无论何时您需要用户或用户集合,您都应该能够访问UserRepository来获取它。这就是生活中的目的,为了给你的用户,你需要过滤它们。