代码之家  ›  专栏  ›  技术社区  ›  Brandon

存储库对数据库有隐藏的依赖关系吗?

  •  1
  • Brandon  · 技术社区  · 16 年前

    例如,你有一个 IRepository SqlRepository 类,它实现了该接口,并由SQL数据库支持。假设该类的构造函数采用连接字符串。如果您的存储库进行存储过程调用,并且这些调用是存储库的内部调用,那么这不是一个隐藏的依赖关系吗?存储库不仅依赖于连接字符串指定的数据库连接,还依赖于安装了正确存储过程的数据库。如果您的备份数据库没有这些存储过程,您的程序将崩溃。如果您没有访问的权限,您如何知道必须安装哪些存储过程才能运行您的程序 SQL存储库

    2 回复  |  直到 15 年前
        1
  •  1
  •   Jeff Sternal    16 年前

    对。问题是没有办法将契约强加给SQL数据库(面向对象意义上的契约)。

    IPersonRepository IPerson存储库 在我们的连接字符串中。

    像Hibernate这样成熟的对象关系映射器通过创建特定于领域的语言来描述这些期望(它们详细的配置规范)来解决这个问题,但是这些技术只是部分解决方案,因为它们不能在数据库端强制实施。

    这是问题的另一个方面 object-relational impedance mismatch ,尽管我还没有看到任何关于它的文章。

        2
  •  1
  •   James Curran    16 年前

    嗯。。。您的存储库还取决于您的数据库是否具有某些表,以及这些表是否具有某些列。这些都是依赖关系,但它们并不是特别隐蔽。

    事实上,这些依赖关系甚至比存储过程更大。存储库可以被重写以避免需要它们,但数据确实必须在那里。。。。