gpt4 book ai didi

database - 存储库对数据库有隐藏的依赖性吗?

转载 作者:搜寻专家 更新时间:2023-10-30 23:23:09 24 4
gpt4 key购买 nike

例如,您有一个IRepository 接口(interface)。您还有一个 SqlRepository 类,它实现了由 SQL 数据库支持的接口(interface)。假设该类的构造函数采用连接字符串。如果您的存储库调用存储过程并且这些调用是存储库内部的,那么这不是隐藏的依赖关系吗?您的存储库不仅取决于连接字符串指定的数据库连接,还取决于安装了正确存储过程的数据库。如果您的后备数据库没有这些存储过程,您的程序就会崩溃。如果您无法访问 SqlRepository 的代码,您怎么知道必须安装哪些存储过程才能让您的程序运行?这是让 DI 拥护者畏缩的隐藏依赖类型吗?

最佳答案

是的。问题是无法对 SQL 数据库施加契约(面向对象意义上的契约)。

也就是说,我们没有任何办法说数据库符合 IPersonRepository 接口(interface),所以我们不能确定它实现了返回的过程“dbo.GetPerson”包含 a、b、c 和 d 列的两个结果集。 (或者我们有权执行该过程。)因此我们不能在连接字符串中要求 IPersonRepository

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

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

关于database - 存储库对数据库有隐藏的依赖性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3469504/

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