在编写数据层CRUD方法时,我一直在使用的几个团队(我不记得我们所做的一切,已经有一段时间了)使用了IDataReader而不是SqlDataReader。
有人可以告诉我为什么我们的建筑师总是喜欢IDataReader吗?
答案 0 :(得分:5)
原因与编码到接口有关:如果你编码到IDataReader
,你可以更好地保证以后可以切换到不同品牌的RDBMS,如果有需要的话。另一方面,如果您编写为SqlDataReader
代码,您的代码可能仍然很容易移植到Oracle上使用,但您对它的信心不足(并且您也必须进行移植) )。
答案 1 :(得分:4)
IDataReader
是抽象,不强制执行任何具体类型,而是签订合同(即执行CRUD操作)。出于可扩展性和可测试性的目的, programming to interface 是首选。
通过接口表示的依赖关系允许您更轻松地更改它们,无论是在单元测试(当提供模拟对象而非实际实现时)或非生产环境(比如使用不同的实现)。
对于其他研究,我建议您查看dependency injection以及与SOLID principles相关的其他概念。
这太荒谬了。您需要更改整个数据层的机会相对较低(因为这是相当大的成本),但您需要支持其他的机会相当高。请考虑以下情况:
所以你去吧。这实际上发生在我一直在研究的项目中,并且在不到10个月的时间内,它们全部来自 Oracle,我们只需要到Oracle,MySQL和SQLite。当然,这些转换总是需要一些额外的工作(主要是由于DB差异),但重复使用多数的DAL代码。如果我们的DAL与Oracle紧密耦合,那会不可能实现?我相信它会,但我确信它会花费更多的时间和精力。
经验教训 - 始终计划成功。
答案 2 :(得分:2)
我认为IDataReader是一个界面。实现和处理许多处理数据库访问的类,而如果你使用SqlDataReader是一个实际使用IDataReader接口的类,但不限于类IDataReader允许你实现并轻松更改数据库提供程序,如果你决定这样做因此,如果您想切换数据库引擎,可以避免重写引用