2013-07-20 7 views
3

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?

+0

http://stackoverflow.com/questions/6137245/c-sharp-idatareader-sqldatareader-difference –

Répondre

8

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é.

1

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

2

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.

1

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.

Questions connexes