使用存储库模式来简化控制器是否有好处?

时间:2014-10-22 09:44:07

标签: c# asp.net-mvc

我创建了很多项目,我的业务逻辑直接访问了我的数据层。由于它是我设置MVC项目的唯一方式,我无法确定系统缺乏的位置。

但是,我想改进这一点。要从我的控制器中删除许多返回函数,我有两种方法可以实现相同的目标。

  1. 将这些返回函数作为模型类的方法包含在内(没有意义,因为需要在每个模型中初始化datacontext)。

  2. 使用存储库

  3. 在阅读了一些关于存储库的内容之后,我还没有遇到任何"细化控制器"可能是一个' pro'使用存储库(通用存储库,可能与此相关)。

    为了理解我正在寻找的答案,我想知道除了上述原因之外,我是否应该使用存储库。是否真的需要存储库?在这种情况下,我的项目只会读取数据(不需要完整的CRUD功能)。

1 个答案:

答案 0 :(得分:4)

肯定需要一个存储库。每个班级应尽可能只有一个真正的责任;你的控制人的工作就是给予'信息到视图。这样做的另一个好处是,如果您确实创建了一个存储库层,然后为它们提供接口,那么您可以使您的解决方案更加可测试。如果你的控制器知道如何从数据库中获取数据(过去使用存储库 - 或类似的),那么你的控制器就是"做"不止一件事违反了单一责任原则。

我曾经使用库SharpRepository使用通用存储库模式,但是我发现我需要对每个存储库访问的内容进行更细粒度的控制(例如,有一些我不想拥有的存储库)变异控制,只能是只读的)。结果我切换回使用非通用存储库。任何不太合适的IOC工具都可以根据约定注册您的存储库(即IFooRepository映射到FooRepository),因此类的数量并不是真正的因素。

正如评论员所说,你的标题并没有真正总结你的问题,所以我会将其总结为其他答案作者:

  

使用存储库模式来简化控制器是否有好处?