存储库模式:在何处放置涉及多个实体的功能?

时间:2012-12-06 07:07:09

标签: design-patterns repository-pattern

我正在使用Repository模式,并且已经存在了很长时间,但有一件事我从未真正找到过一个好的解决方案。我经常需要访问与多个实体相关的数据,而我无法找到适合放置该功能的好解决方案。一些案例:

假设在系统中有用户具有任务:

  • 我需要检索每个用户的最新任务列表,作为用户与任务的配对,比如Dictionary<int, int> GetUsersRecentTask()
  • 我需要生成该月所有用户及其任务的报告。
  • 我需要生成系统中所有对象的统计信息。

现在通常我会把它放在用户存储库中,但它感觉不对

我也尝试将它放在更高级别的服务中,但是它只是不适合将数据访问放在那里

那么我最好放在哪里。

1 个答案:

答案 0 :(得分:1)

不要将Repository模式视为教条。这只是一个概念。因此,UsersRepository具有GetUsersRecentTask,您可以使用不同的存储库,例如:带有GetUsersReport的ReportsRepository(包含任务)和带有Get [Object] Stats的StatisticsRepository。

虽然存储库模式最初只处理业务对象,但如果您需要“较小”对象(如View Models)或报告数据(仅仅是数据结构)(无行为),它仍然是一个很好的模式。因此,向ReportsRepository询问某个报告是有意义的。

您唯一需要注意的是,某些存储库处理业务对象,而其他存储库处理DTO。