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

C# 使用存储库模式简化控制器是否有好处?,c#,asp.net-mvc,C#,Asp.net Mvc,我已经创建了很多项目,其中我的业务逻辑直接访问了我的数据层。因为这是我设置MVC项目的唯一方法,所以我不能确定该系统在哪里缺失 不过,我希望在这方面有所改进。要从我的控制器中删除许多返回函数,有两种方法可以实现相同的目标 包括这些返回函数作为模型类的方法(没有意义,因为需要在每个模型中初始化datacontext) 使用存储库 在阅读了一点关于存储库的内容之后,我没有遇到任何“细化您的控制器”可能是使用存储库(通用存储库,可能与此相关)的“专业”的实例 为了理解我正在寻找的答案,我想知道,除了上

我已经创建了很多项目,其中我的业务逻辑直接访问了我的数据层。因为这是我设置MVC项目的唯一方法,所以我不能确定该系统在哪里缺失

不过,我希望在这方面有所改进。要从我的控制器中删除许多返回函数,有两种方法可以实现相同的目标

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

  • 使用存储库

  • 在阅读了一点关于存储库的内容之后,我没有遇到任何“细化您的控制器”可能是使用存储库(通用存储库,可能与此相关)的“专业”的实例


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

    肯定需要存储库。在可能的情况下,每个班级都应该只有一个真正的责任;控制器的工作只是向视图“提供”信息。这样做的另一个好处是,如果您确实创建了存储库层,并且为它们创建了接口,那么您可以使您的解决方案更易于测试。如果您的控制器知道如何从数据库获取数据(过去使用存储库-或类似),那么您的控制器“做”的事情不止一件,这违反了单一责任原则

    我曾经使用库SharpRepository使用通用存储库模式,但是我发现我需要对每个存储库可以访问的内容进行更细粒度的控制(例如,有些存储库我不想进行变异控制,而只希望是只读的)。因此,我转而使用非通用存储库。任何半体面的IOC工具都能够根据约定注册您的存储库(即,
    IFooRepository
    映射到
    FooRepository
    ),因此类的数量实际上不是一个因素

    正如一位评论者提到的,你的标题并不能真正概括你的问题,因此我将为其他答案作者总结一下:

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


    肯定需要一个存储库。在可能的情况下,每个班级都应该只有一个真正的责任;控制器的工作只是向视图“提供”信息。这样做的另一个好处是,如果您确实创建了存储库层,并且为它们创建了接口,那么您可以使您的解决方案更易于测试。如果您的控制器知道如何从数据库获取数据(过去使用存储库-或类似),那么您的控制器“做”的事情不止一件,这违反了单一责任原则

    我曾经使用库SharpRepository使用通用存储库模式,但是我发现我需要对每个存储库可以访问的内容进行更细粒度的控制(例如,有些存储库我不想进行变异控制,而只希望是只读的)。因此,我转而使用非通用存储库。任何半体面的IOC工具都能够根据约定注册您的存储库(即,
    IFooRepository
    映射到
    FooRepository
    ),因此类的数量实际上不是一个因素

    正如一位评论者提到的,你的标题并不能真正概括你的问题,因此我将为其他答案作者总结一下:

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


    我一个人读了这个标题,我不知道你在说什么,所以它不能概括这个问题。为了完整性,@DaveDev在修改标题之前评论道,DAL使用的是什么?EF上下文已经可以被视为UoW+存储库了。我单独阅读了标题,不知道你在说什么,所以它不能概括问题。为了完整性,@DaveDev在标题修改之前评论道,DAL使用的是什么?EF上下文已经可以被视为UoW+存储库了。谢谢,我意识到我的标题甚至没有问任何问题。我会删掉第1行谢谢,我意识到我的标题连一个问题都没问。我将删掉第一行