Я знаю, что IDataReader
- это интерфейс, а DataReader
- это конкретный тип, но я до сих пор не знаю, когда использовать его. Мне нужно перебирать данные, которые возможны с использованием как Datareader
, так и IDataReader
. Есть ли лучший способ решить, когда использовать интерфейс или конкретный тип?Когда использовать IDataReader и когда использовать DataReader?
ответ
SqlDataReader
и все другие поставщики данных реализуют IDataReader
. Если вы считаете, что можете изменить провайдера из sql в oracle или еще что-нибудь еще в будущем, тогда используйте IDataReader
. У вас будет возможность изменить это, не изменяя код, где вы использовали IDataReader
. Кроме того, вы можете использовать SqlDataReader
. Но если вы используете IDataReader
, это будет развязанный дизайн и будет рекомендован.
IDataReader
относится к интерфейсу. В принципе, если ваш метод принимает IDataReader
, это означает, что он примет все, что использует этот интерфейс. Это означает, что вы можете использовать любой считыватель данных, который вы хотите в основном. Метод примет ваш datareader, потому что datareader реализует интерфейс IDataReader
.
Преимущество этого в том, что этот метод не является специфичным для конкретного типа устройства чтения данных. Вы также можете запустить свой собственный класс, который реализует этот интерфейс.
Приглашен это LINK
Вы должны использовать интерфейс всякий раз, когда вы хотите, чтобы разъединить чтение из (создание) фактического читателя. Например, для тестирования или когда вы хотите быть готовым к переключению баз данных.
Но, как правило, потребительский код DataReader тесно связан с считывателем, и вы не потрудились бы с интерфейсом.
Если код не абсолютно положительно необходимо знать о конкретном типе (например, использовать какой-либо метод, который доступен только на конкретной реализации), то я бы сказал: обратитесь к интерфейсу. Это делает код более гибким - например, было бы тривиально добавлять в профилирующий декоратор (например, «MiniProfiler»), который находится в трубе ADO.NET. Если вы жестко закодированы до SqlDataReader
, вы не сможете этого сделать. Это также означает, что вы можете полностью изменить сервер. Но, откровенно говоря, это, как правило, огромное решение и потребует значительных изменений кода, поэтому сценарий менее «очевидный».
Однако я бы также сказал, что большинство людей пишут слишком много сантехнического кода с использованием ADO.NET. Существуют инструменты, такие как «dapper» или более тяжелые (но более многофункциональные) ORM, которые могут сделать это для вас, избегая большого риска человеческой ошибки.
- 1. DataReader, DataAdapter & DataSet - Когда использовать?
- 2. ADO.NET Вопрос: Когда использовать DataReader, DataAdapter
- 3. когда использовать Bpm и когда использовать esb
- 4. Когда использовать :: и когда использовать # в документации
- 5. Когда использовать IList и когда использовать Список
- 6. , когда использовать LDAP и когда использовать PrincipalContext
- 7. Когда использовать себя и когда использовать сохранить
- 8. Когда использовать jQuery.ajax и когда использовать jQuery.post?
- 9. Когда использовать расширения и когда использовать интерфейс?
- 10. Когда использовать задачу и когда использовать Thread?
- 11. Когда использовать .shape и когда использовать .reshape?
- 12. Когда использовать длину и когда использовать длину()
- 13. Когда использовать XOR и когда использовать IFF?
- 14. Когда использовать app.use и когда использовать app.all?
- 15. Когда использовать __proto__ и когда использовать прототип
- 16. Когда использовать модуль и когда использовать класс
- 17. Когда использовать socket.io и когда использовать ajax
- 18. Когда использовать систему() и когда использовать execv *()?
- 19. Когда использовать POJO и когда использовать SLSB
- 20. Когда использовать собственный и когда использовать Blas
- 21. Когда использовать класс и когда использовать dict?
- 22. Когда использовать JMS и когда использовать REST?
- 23. Когда использовать конструктор и когда использовать OnInit
- 24. Когда использовать ReaderWriterLockSlim и когда использовать ConcurrentBag?
- 25. когда использовать адаптер и когда использовать inflater
- 26. Когда использовать DataTrigger и когда использовать Конвертер?
- 27. Когда использовать node.js и когда использовать ajax?
- 28. Когда использовать $ и когда не
- 29. Когда следует использовать * и когда &?
- 30. События и звонки, когда использовать и когда их не использовать?
http://stackoverflow.com/questions/6137245/c-sharp-idatareader-sqldatareader-difference –