Когда использовать IDataReader и когда использовать DataReader?

Я знаю это IDataReader это интерфейс и DataReader это конкретный тип, но я до сих пор не знаю, когда использовать каждый из них. Мне нужно перебрать данные, которые можно использовать как Datareader а также IDataReader, Есть ли лучший способ решить, когда использовать интерфейс или конкретный тип?

4 ответа

Решение

SqlDataReader и все другие поставщики данных реализуют IDataReader, Если вы думаете, что в будущем можете сменить провайдера с sql на oracle или что-то еще, используйте IDataReader, У вас будет возможность изменить это, не меняя код, в котором вы использовали IDataReader, Иначе вы можете использовать SqlDataReader, Но если вы используете IDataReader это будет развязанный дизайн и рекомендуется.

Вы будете использовать интерфейс всякий раз, когда захотите отделить чтение от (создания) фактического читателя. Например, для тестирования или когда вы хотите быть готовым к переключению баз данных.

Но обычно код, использующий DataReader, тесно связан с читателем, и вы не будете беспокоиться об интерфейсе.

Если ваш код не обязательно должен знать о конкретном типе (например, использовать какой-либо метод, который доступен только в конкретной реализации), то я бы сказал: обратитесь к интерфейсу. Это делает ваш код гораздо более гибким - например, было бы тривиально добавить в декоратор профилирования (например, "MiniProfiler"), который находится в канале ADO.NET. Если вы жестко SqlDataReaderВы не можете сделать это. Это также означает, что вы можете полностью изменить бэкэнд. Но, откровенно говоря, это, как правило, огромное решение, которое включает значительные изменения кода, так что сценарий менее "очевиден".

Тем не менее, я также полагаю, что большинство людей пишут слишком много сланцевого кода с использованием ADO.NET. Существуют такие инструменты, как "грубые" или более тяжелые (но более многофункциональные) ORM, которые могут сделать это для вас, избегая большого риска человеческих ошибок.

IDataReader имеет в виду интерфейс. В основном, если ваш метод принимает IDataReader это означает, что он будет принимать все, что использует этот интерфейс. Это означает, что вы можете использовать любой читатель данных, который вы хотите в принципе. Метод примет ваш datareader, потому что datareader реализует IDataReader интерфейс.

Преимущество этого состоит в том, что метод не является специфическим для определенного типа считывателя данных. Вы также можете свернуть свой собственный класс, который реализует этот интерфейс.

Ссылка на эту ссылку

Другие вопросы по тегам