我知道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 –