Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用IDataReader或SqlDataReader_C#_.net_Ado.net - Fatal编程技术网

C# 使用IDataReader或SqlDataReader

C# 使用IDataReader或SqlDataReader,c#,.net,ado.net,C#,.net,Ado.net,我参加过的几个团队(不,我不记得我们在做什么,已经有一段时间了)在编码数据层CRUD方法时使用IDataReader而不是SqlDataReader 有人能告诉我为什么我们的架构师总是喜欢IDataReader吗?原因与对接口进行编码有关:如果您对IDataReader进行编码,您可以更好地保证以后可以切换到不同品牌的RDBMS,如果需要的话。另一方面,如果您将代码编写到SqlDataReader,您的代码可能仍然很容易移植到Oracle中使用,但您对此的信心会降低(您也必须进行移植)。原因与编

我参加过的几个团队(不,我不记得我们在做什么,已经有一段时间了)在编码数据层CRUD方法时使用IDataReader而不是SqlDataReader


有人能告诉我为什么我们的架构师总是喜欢IDataReader吗?

原因与对接口进行编码有关:如果您对IDataReader进行编码,您可以更好地保证以后可以切换到不同品牌的RDBMS,如果需要的话。另一方面,如果您将代码编写到
SqlDataReader
,您的代码可能仍然很容易移植到Oracle中使用,但您对此的信心会降低(您也必须进行移植)。

原因与编写到接口有关:如果您将代码编写到
IDataReader
,如果有必要,您可以更好地保证以后可以切换到不同品牌的RDBMS。另一方面,如果您编码到
SqlDataReader
,您的代码可能仍然很容易移植到Oracle中使用,但您对此的信心会降低(您也必须进行移植)。

IDataReader
是抽象的,不是强制执行任何具体类型,而是契约(即执行CRUD操作)。出于可扩展性和可测试性的目的,首选

通过接口表示依赖关系,您可以更轻松地更改它们,无论是在单元测试中(当提供模拟对象而不是实际实现时)还是在非生产环境中(如使用不同的实现)

对于更多的研究,我建议看一看和其他相关的概念

为什么要更改数据层或完全替换数据库? 那太可笑了。您需要更改整个数据层的可能性相对较低(因为这是相当大的成本),但您需要支持其他数据层的可能性相当大。考虑下面的场景:

  • 客户希望在Oracle Box上运行一个软件,因为这就是他们所拥有的,他们不希望在服务器上运行任何额外的数据库。从实用的角度来看,您永远不会将Oracle位暴露在DAL之外,而是保持它的干净性,并对接口进行编程
  • 这个项目被证明足够吸引另一个客户。然而,他并没有那么富有,而且正在运行MySQL——整个DAL现在都必须在MySQL上工作,而且事实证明,在实现方面并不特别困难(将Oracle MySQL的差异放在一边)。大部分代码库是重用的
  • 最后,作为一些负载平衡工作的一部分,Oracle客户端决定将一些计算委托给不同的盒子,所有盒子都在主从模式下工作(主从模式是原始软件,调整为主从模式)。从本质上讲,奴隶是运行在旧而慢的机器上的主机器的小版本。他们必须使用SQLite作为数据存储
好了。这实际上发生在我一直从事的一个项目上,在不到10个月的时间里,从Oracle到Oracle、MySQL和SQLite,这一切都是我们所需要的。当然,这些转换总是需要一些额外的工作(主要是由于DB的差异),但是大部分DAL代码被重用。如果我们的DAL与Oracle紧密结合,这难道不可能吗?我肯定会的,但我也同样肯定这会花费更多的时间和精力


经验教训-始终计划成功

IDataReader
是抽象,不是强制执行任何具体类型,而是契约(即执行CRUD操作)。出于可扩展性和可测试性的目的,首选

通过接口表示依赖关系,您可以更轻松地更改它们,无论是在单元测试中(当提供模拟对象而不是实际实现时)还是在非生产环境中(如使用不同的实现)

对于更多的研究,我建议看一看和其他相关的概念

为什么要更改数据层或完全替换数据库? 那太可笑了。您需要更改整个数据层的可能性相对较低(因为这是相当大的成本),但您需要支持其他数据层的可能性相当大。考虑下面的场景:

  • 客户希望在Oracle Box上运行一个软件,因为这就是他们所拥有的,他们不希望在服务器上运行任何额外的数据库。从实用的角度来看,您永远不会将Oracle位暴露在DAL之外,而是保持它的干净性,并对接口进行编程
  • 这个项目被证明足够吸引另一个客户。然而,他并没有那么富有,而且正在运行MySQL——整个DAL现在都必须在MySQL上工作,而且事实证明,在实现方面并不特别困难(将Oracle MySQL的差异放在一边)。大部分代码库是重用的
  • 最后,作为一些负载平衡工作的一部分,Oracle客户端决定将一些计算委托给不同的盒子,所有盒子都在主从模式下工作(主从模式是原始软件,调整为主从模式)。从本质上讲,奴隶是运行在旧而慢的机器上的主机器的小版本。他们必须使用SQLite作为数据存储
好了。这实际上发生在我一直从事的一个项目上,在不到10个月的时间里,从Oracle到Oracle、MySQL和SQLite,这一切都是我们所需要的。当然,这些转换总是需要一些额外的工作(主要是由于DB的差异),但是大部分DAL代码被重用。如果我们的DAL与Oracle紧密结合,这难道不可能吗?我肯定会的,但我也同样肯定这会花费更多的时间和精力


经验教训-始终为成功做好计划

我认为IDataReader是一个界面。它实现并处理许多处理数据库的类