【问题标题】:Need a more in depth example of repository pattern and dependency injection需要更深入的存储库模式和依赖注入示例
【发布时间】:2009-06-09 00:13:35
【问题描述】:

在浏览了一些关于 asp.net mvc 的教程之后,存储库模式出现了,示例是一张桌子,晚餐桌。基本上,设置是创建一个接口,然后是一个具体的类,该类实现该接口并在控制器类中对接口进行编程。接口有你典型的 crud 方法。如果要使用此模式,是否必须为每种类型创建一个接口。例如,有一个带有晚餐类型的 GetList 方法。如果你有 10 种不同的类型需要执行 crud 功能怎么办?这是否意味着 10 个接口和 10 个具体类只是为了能够在未来切换 db 技术? 我试图弄清楚如何将此模式应用于标准的 3 层架构(对象层、业务逻辑层、数据访问层)。

谢谢。

【问题讨论】:

    标签: asp.net-mvc design-patterns dependency-injection


    【解决方案1】:

    这是我通常在我的实现中这样做的方式。

    定义基本 CRUD 结构的通用接口 IEntityRepository。在我的实现中,我定义了以下成员:

    1. 插入
    2. 更新
    3. 删除
    4. 获取
    5. 获取分页
    6. 全部获取
    7. 查找(这个是使用谓词构建器来构建 where 子句)

    我创建了另一个接口 IMyentityRepository,它继承了 IEntityRepository。这允许我添加任何特定于实体的成员,并且在需要时仍然能够使用 DI。然后我创建了我的密封类 MyentityRepository,它继承了 IMyentityRepository 并实现了所有成员。

    当您使用依赖注入时,您可以为具体类型的 MyentityRepository 注册您的接口 (IMyentityRepository)。

    就我而言,我实际上并没有完成。我在存储库之上创建了一个服务层来封装它并以更通用的方式公开它。例如,假设您想为您的用户创建一个帐户,这可能涉及比简单地创建数据库记录更多的工作。在您的服务中,您将有一个名为 CreateUser() 的成员,它可以在其实现中调用多个存储库成员。 我的服务层与存储库层的构建方式相同。我为常见的 CRUD 成员提供 IEntityService,为特定于实体的成员提供 IMyentityService,为实现提供 MyentityService。 MyentityService 类将需要 IMyentityService 的实例(您可以使用您选择的 IoC 框架注入它)您的服务层还可以进行验证和任何业务逻辑。我在控制器中进行验证。好吧,从技术上讲,我在我的控制器中调用它并获得结果,然后我可以将其写入 ModelState。

    希望能有所帮助。

    【讨论】:

      【解决方案2】:

      这可能比您要查找的内容更复杂,但您可以查看S#arp Architecture 中的示例 Northwind 应用程序。

      存储库位于 Northwind.Core 项目中。

      此外,使用存储库和 DI 的好处不是您可以在未来某个日期切换底层数据库技术。相反,您可以获得编写单元测试的能力,您可以在这些测试中模拟和伪造服务(由接口定义),以测试它们所依赖的类。

      【讨论】:

        【解决方案3】:

        您是否创建具有可用于任何表的 CRUD 方法的通用 IRepository 类与每个表的唯一存储库类取决于您。

        这是我在做决定时会问的那种问题:

        “每个存储库都应该支持创建、读取、更新和删除吗?”

        我选择使用自定义存储库类,以便我的接口更加明确。例如,我有不允许插入、更新或删除的查找数据表。这些表的存储库仅包含 Get 方法。这为我提供了更简洁的设计,但代价是更多的工作。

        【讨论】:

        • 您是否正在创建一个接口,然后为那些仅获取存储库的具体类创建一个?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-21
        • 2010-10-19
        • 1970-01-01
        相关资源
        最近更新 更多