2017-10-16 87 views
1

我很确定我对如何实现Repository Pattern有了很好的理解,但是我陷入了关于复杂查询/方法的决策循环中。存储库模式:复杂的方法去哪里?

如果我想获得所有在用户表上具有特定字段值的用户或用户,那么很明显,它将进入用户存储库。但是,如果我有更复杂的查询,例如所有完成视频课程的视频课程的用户,该怎么办?在我的模型中,这个查询大约有6个表。

我希望能够为我们的存储库做一些事情,如if(user.completedVideoRequirement),但我很难说服自己,用户存储库是这个地方。这对我来说似乎是对的,但我可以很容易地将自己说出来。

什么是正确的方法?

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

+0

你在使用ef吗?如果是,那么你应该有一个系统中所有表的上下文。如果是,那么您可以从一个存储库访问任何具有该上下文的表。它有什么问题? – cassandrad

回答

1

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

无论何时你需要一个用户或用户集合,你应该能够去UserRepository来获取它。这就是它的目的,给你的用户,但你需要他们过滤。

+0

我接受了你的答案,因为它完全回答了问题的原始表述。另外,我想它会适用于编辑版本。我编辑了这个问题以包含不返回数据库对象作为结果的方法(即.t/f,int) – DiscipleMichael