我知道这IDataReader
是接口并且DataReader
是具体类型,但我仍然不知道何时使用每个。我需要遍历可以同时使用Datareader
和的数据IDataReader
。有没有更好的方法来决定何时使用接口或具体类型?
4 回答
SqlDataReader
和所有其他数据提供者实现IDataReader
. 如果您认为将来可能将提供程序从sql更改为oracle 或其他内容IDataReader
,请使用. 您可以在不更改您使用过的代码的情况下更改它IDataReader
。否则你可以使用SqlDataReader
. 但是如果你使用IDataReader
它会是一个解耦的设计并且被推荐。
每当您想将阅读与(创建)实际阅读器分离时,您都可以使用界面。例如,用于测试或当您想要准备切换数据库时。
但通常 DataReader 消费代码与阅读器紧密耦合,您不会为接口而烦恼。
IDataReader
是指一个接口。基本上,如果您的方法接受一个IDataReader
,这意味着它将接受任何使用该接口的东西。这意味着您基本上可以使用任何您想要的数据阅读器。该方法将接受您的数据读取器,因为数据读取器实现了IDataReader
接口。
这样做的好处是该方法不特定于特定类型的数据读取器。您还可以推出自己的实现此接口的类。
参考了这个链接
如果您的代码不是绝对肯定需要了解具体类型(例如,使用某些仅在特定实现上可用的方法),那么我会说:参考接口。这使您的代码更加灵活 - 例如,添加位于 ADO.NET 管道中的分析装饰器(如“MiniProfiler”)将是微不足道的。如果您已硬编码为SqlDataReader
,则无法执行此操作。这也意味着您可以完全更改后端。但坦率地说,这通常是一个巨大的决定,并且会涉及重大的代码更改,因此这种情况不太“明显”。
但是,我还认为大多数人编写了太多涉及 ADO.NET 的管道代码。有诸如“dapper”之类的工具,或更重(但功能更丰富)的 ORM 可以为您执行此操作,避免了很多人为错误的风险。