我知道IDataReader
是接口,DataReader
是具体类型,但我仍然不知道何时使用每一个。我需要遍历可能使用Datareader
和IDataReader
的数据。有没有更好的方法来决定何时使用接口或具体类型?何时使用IDataReader以及何时使用DataReader?
3
A
回答
8
SqlDataReader
和所有其他数据提供者实施IDataReader
。如果您认为您可能会将供应商从sql更改为oracle或其他,然后再使用IDataReader
。您将可以在不改变代码的情况下更改代码IDataReader
。否则您可以使用SqlDataReader
。 但是,如果您使用IDataReader
它将是一个分离设计,并建议使用。
1
IDataReader
指的是一个接口。基本上如果你的方法接受一个IDataReader
这意味着它会接受任何使用该接口的东西。这意味着你可以使用任何你想要的数据读取器。该方法将接受您的数据读取器,因为数据读取器实现了IDataReader
接口。
这样做的好处是该方法并不特定于特定类型的数据读取器。你也可以推出你自己的实现这个接口的类。
提到这个LINK
2
每当你想要去耦(创建)的实际读者阅读你会使用的接口。例如,用于测试或何时想要为切换数据库做好准备。
但是,通常情况下,DataReader消耗代码与读取器紧密耦合,您不会为接口而烦恼。
1
如果你的代码不绝对肯定需要了解具体类型(例如,使用一些方法,这只是具体实现可用),那么我会说:是指接口。这使得代码更加灵活 - 例如,添加到位于ADO.NET管道中的分析修饰器(如“MiniProfiler”)中将是微不足道的。如果您有硬编码为SqlDataReader
,则不能这样做。这也意味着你可以完全改变后端。但坦率地说,这通常是一个巨大的决定,并且会涉及重大的代码更改,所以这种情况不那么“明显”。
但是,我也认为大多数人写了太多涉及ADO.NET的管道代码。有像“小巧玲珑”这样的工具,或者更重的(但功能更丰富的)ORM可以为您做到这一点,避免了人为错误的风险。
相关问题
- 1. 何时使用==以及何时使用?
- 2. 何时使用belongsTo以及何时hasMany?
- 3. 何时使用jQuery.ajax以及何时使用jQuery.post?
- 4. 何时使用Apache Helix以及何时使用Apache Mesos
- 5. 何时使用Abstract Factory以及何时使用Factory Method?
- 6. 何时使用LEFT JOIN以及何时使用INNER JOIN?
- 7. PHP:何时使用Traits以及何时使用静态方法?
- 8. 何时使用Value Formatter以及何时使用Value Resolver
- 9. 何时使用json文件以及何时使用js文件?
- 10. 何时使用:something =>'something'以及何时使用:something,'something'?
- 11. Elixir:何时使用'数字'以及何时使用'整数'
- 12. 何时使用Class.isInstance()以及何时使用instanceof运算符?
- 13. 何时使用Socket以及何时在Flex中使用XMLSocket?
- 14. 何时使用以及何时不使用Python 2.7_中的__init__
- 15. 何时使用undef_method以及何时使用remove_method?
- 16. 何时使用ICommand包装RelayCommand以及何时使用Just ReplayCommand?
- 17. 何时使用Core Data以及何时使用Sqlite?
- 18. 何时使用数组以及何时使用单元阵列?
- 19. 何时使用DataTrigger以及何时使用Converter?
- 20. 何时使用Docker-Compose以及何时使用Docker-Swarm
- 21. 何时使用dup以及何时在Ruby中使用克隆?
- 22. 何时使用Gen_Fsm以及何时使用Gen_Server?
- 23. 何时使用布局以及何时使用活动?
- 24. 何时使用uid以及何时在$ $ $ $中使用$ id
- 25. 何时使用ASP.NET验证控件以及何时不使用?
- 26. 何时使用Pig以及何时使用Java for Mapreduce?
- 27. 何时使用Comparator以及何时在Java中使用Comparable?
- 28. 何时使用Twitter Bootstrap以及何时使用HTML5 Boilerplate?
- 29. 何时使用node.js以及何时使用ajax?
- 30. 何时使用json以及何时使用jquery $ .ajax进行jsonp?
http://stackoverflow.com/questions/6137245/c-sharp-idatareader-sqldatareader-difference –