gpt4 book ai didi

asp.net - 轻松实现存储库模式

转载 作者:行者123 更新时间:2023-12-01 01:22:40 25 4
gpt4 key购买 nike

我直接将 ADO.NET 与 MVC 5 一起使用,而不是 Entity Framework 。

我指的是这个example实现存储库模式。

对于存储库模式的简单实现:

  • 我将创建一个模型
  • 我将创建一个带有 CRUD 方法声明的接口(interface)
  • 我将在数据访问层中创建一个类,该类将实现上述接口(interface)并将具有 CRUD 方法实现

  • 我想知道为什么使用接口(interface)?根据上面的第(3)点,我可以不直接使用一个类。

    接口(interface)的作用是什么?

    根据上面提到的三点,它是Repository Pattern的正确实现吗?

    最佳答案

    在设计良好的代码中,您必须使用接口(interface),而不是实现。它有好处。假设您有一个带有代码片段的类:

    IBookRepository bookRepository;

    public Book GetInterestingBook() {
    var book = bookRepository.getBooks().FirstOrDefault(x => x.IsInteresting);
    return book;
    }

    现在我将向您展示一些好处:
  • 使用接口(interface)允许您通过依赖注入(inject)(Ninject、Unity 等。其中有很多)隐式创建 bookRepository 实例。如果您决定将存储库实现从 Entity Framework 更改为 NHibernate,则无需更改代码。只需更改映射文件中的映射以用于 IBookRepository NHibernateRepository 而不是 EFBookRepository。当然,NHibernateRepository 也应该被开发。
  • 使用接口(interface)允许您通过 MockObjects 实现出色的单元测试。您只需要实现 MockBookRepository 并在注入(inject)时使用它。有许多 Mock 框架可以帮助您实现它——例如 Moq。
  • 您可以在不更改代码的情况下动态切换存储库。例如,如果您的数据库暂时关闭,但您有另一个可以处理新订单,例如因为它们很关键(我知道这是不好的例子)。在这种情况下,您检测到 DB 倒下并进行如下操作:

    currentRepository = 临时OrdersOnlyRepository;

  • 现在您的代码继续运行,除了您的获取数据和删除方法返回异常但 CreateNewOrder() 方法会将订单保存到字符串文件)

    祝你好运!

    关于asp.net - 轻松实现存储库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32003926/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com