Je sais que IDataReader
est l'interface et DataReader
est le type concret mais je ne sais toujours pas quand utiliser chacun d'eux. Je dois itérer à travers les données qui sont possibles en utilisant à la fois Datareader
et IDataReader
. Y a-t-il une meilleure façon de décider quand utiliser l'interface ou le type concret?Quand utiliser IDataReader et quand utiliser DataReader?
Répondre
SqlDataReader
et tous les autres fournisseurs de données implémentent IDataReader
. Si vous pensez que vous pouvez changer le fournisseur de sql à oracle ou quelque chose d'autre à l'avenir, puis utiliser IDataReader
. Vous aurez le luxe de changer cela sans changer votre code où vous avez utilisé IDataReader
. Sinon, vous pouvez utiliser SqlDataReader
. Mais si vous utilisez IDataReader
, ce sera un design découplé et recommandé.
IDataReader
fait référence à une interface. Fondamentalement, si votre méthode accepte un IDataReader
cela signifie qu'il acceptera tout ce qui utilise cette interface. Cela signifie que vous pouvez utiliser n'importe quel lecteur de données que vous voulez. La méthode acceptera votre lecteur de données parce que le lecteur de données implémente l'interface IDataReader
. L'avantage de cela est que la méthode n'est pas spécifique à un type spécifique de lecteur de données. Vous pouvez également lancer votre propre classe qui implémente cette interface.
Référé cette LINK
Vous utilisez l'interface chaque fois que vous vouliez découpler la lecture de (créer) le lecteur réel. Par exemple pour tester ou quand vous voulez être préparé pour changer de base de données.
Mais normalement, le code consommant DataReader est étroitement couplé au lecteur et vous ne vous soucieriez pas d'une interface.
Si votre code n'a pas besoin absolument positivement à savoir sur le type de béton (par exemple, d'utiliser une méthode qui est disponible uniquement sur la mise en œuvre spécifique), je dirais: se référer à l'interface. Cela rend le code beaucoup plus flexible - par exemple, il serait trivial d'ajouter dans un décorateur de profilage (comme "MiniProfiler") qui se trouve dans le tuyau ADO.NET. Si vous avez codé en dur à SqlDataReader
, vous ne pouvez pas le faire. Cela signifie également que vous pouvez changer entièrement de backend. Mais franchement, c'est généralement une décision énorme et impliquera des changements de code significatifs, de sorte que ce scénario est moins "évident".
Cependant, je dirais aussi que la plupart des gens écrivent trop de code de plomberie impliquant ADO.NET. Il existe des outils tels que les ORM «dapper», ou plus lourds (mais plus riches en fonctionnalités) qui peuvent le faire pour vous, évitant ainsi beaucoup de risques d'erreur humaine.
- 1. Quand utiliser undef_method, et quand utiliser remove_method?
- 2. Quand utiliser directX et quand utiliser OpenGL?
- 3. Quand utiliser POJO et Quand utiliser SLSB
- 4. quand utiliser l'adaptateur et quand utiliser inflater
- 5. quand utiliser Bpm et quand utiliser esb
- 6. Quand utiliser ContainerMovieClip et quand utiliser UIMovieClip?
- 7. Quand utiliser XOR et quand utiliser IFF?
- 8. Quand utiliser conserver et quand utiliser copier
- 9. Quand utiliser un module et quand utiliser une classe
- 10. Quand utiliser Socket et quand utiliser XMLSocket dans Flex?
- 11. Quand utiliser l'activateur et quand utiliser la méthode d'usine?
- 12. Quand utiliser les classes abstraites et quand utiliser les interfaces
- 13. En javascript, quand utiliser l'objet littéral et quand utiliser array?
- 14. Quand utiliser une classe et quand utiliser un dict?
- 15. Quand utiliser Value Formatter et quand utiliser Value Resolver
- 16. Quand utiliser ArrayList et quand utiliser un tableau d'entiers simples
- 17. Quand utiliser Interface et quand utiliser Résumé classe
- 18. BackboneJS: Quand utiliser fetch et quand utiliser la synchronisation?
- 19. Quand utiliser les catégories et quand utiliser le sous-classement?
- 20. quand utiliser SQL et quand utiliser la procédure stockée?
- 21. Hibernate: Quand utiliser getSession() et quand utiliser getCurrentSession()?
- 22. Elixir: quand utiliser 'nombre' et quand utiliser 'nombre entier'
- 23. Quand utiliser `zipmap` et quand` map vector`?
- 24. Quand utiliser OSGi EventAdmin et quand?
- 25. quand utiliser attribut et quand enfant?
- 26. Quand utiliser -ComputerName et quand -ConnectionUri?
- 27. Quand utiliser/proc et quand/dev
- 28. Quand utiliser "si" et "quand" dans Clojure?
- 29. Quand libérer quand utiliser "withCompletionHandler"
- 30. Quand utiliser pushScene et replaceScene?
http://stackoverflow.com/questions/6137245/c-sharp-idatareader-sqldatareader-difference –