Библиотека доступа к данным возвращает набор данных или объект

Есть ли общий консенсус относительно работы с библиотеками, которые вызывают хранимые процедуры? Возвращать наборы данных или использовать sqldatareader для заполнения настраиваемых объектов?

Стоимость сериализации вашего транспортного объекта данных меньше, чем стоимость набора данных?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
804
5

Ответы 5

Я также использую dataReader, но имейте в виду, что если вы это сделаете, вы должны быть осторожны, чтобы закрыть его (и соединение, которое он использует) как можно быстрее после того, как вы закончите заполнение настраиваемого объекта (ов). обратите внимание на то, что при вызове OpenReader () убедитесь, что вы передаете необязательный параметр CommandBehavior, установленный в CommandBehavior.CloseConenction, или, даже если вы закроете средство чтения, базовое соединение не будет закрыто и передано в пул, пока оно не получит выбирается сборщиком мусора, что может легко привести к тому, что у вас закончатся доступные соединения, если вы вызываете несколько объектов чтения в цикле.

В какой-то момент это зависит от цели библиотеки, или, я бы сказал, функциональности библиотеки. Поскольку шумиха вокруг ООП, «общий консенсус» заключается в том, чтобы сначала получить / извлечь данные в DAL с помощью загрузчиков данных, поскольку они работают быстрее, а затем загрузить свои объекты и закрыть своих читателей, однако это не всегда так. Для простоты некоторые передают набор данных обратно, чтобы можно было ограничить просмотры сетки и включить разбиение по страницам / сортировку с минимальным кодом. Помните, что простое лучше.

Однако в приложении для создания отчетов я заметил сходство наборов данных, особенно если данные предоставляются веб-службами.

Стоимость сериализации будет зависеть от использования приложения, а также опыта. Неопытный разработчик может вернуть от 3000 до 50000 строк ненужных данных в наборе данных. Помните, что набор данных - это животное, но с большим количеством функций. Используйте с умом.

Большинство ORM выполняет сериализацию за кулисами (здесь я исправлюсь), поэтому было бы справедливо сказать, что это не будет стоить так дорого, но опять же, это зависит от приложения.

Лично я использую SqlDataAdapter с DataTables. DataTables имеют на СПОСОБ меньше накладных расходов, чем DataSets. Мои объекты сущности содержат только бизнес-правила, они не используются для передачи данных между уровнями.

Вы можете подумать о том, чтобы пропустить библиотеку доступа к данным; вместо этого сделайте так, чтобы ваши бизнес-объекты были автоматически там для вас, заполнены данными, когда они вам понадобятся. NHibernate.

ИМО, смешивание вашего транспорта данных и объектов сущностей - это катастрофа.

Robert C. Barth 30.12.2008 23:10

Объекты сущностей не обрабатываются NHibernate как объекты передачи данных. NHibernate выполняет перенос данных за кулисами, так что вам это не нужно, но механизм передачи данных есть, и он большой.

yfeldblum 31.12.2008 08:19

Кроме того, NHibernate не является стилем ActiveRecord (класс = таблица, свойство = столбец). Конфигурация NHibernate легко настраивается и допускает ряд сложных сопоставлений.

yfeldblum 31.12.2008 08:20

Я должен согласиться с Джастисом, не обязательно с NHibernate (хотя это отличный вариант), я бы определенно посмотрел на использование какого-то ORM, такого как NHibernate, Subsonic, Linq-to-sql, llblgen или любой другой из ORM вокруг .

Как Джереми Миллер заявляет:

if you're writing ADO.Net code by hand, you're stealing from your employer or client.

и с этой целью я бы рекомендовал возвращать объекты, а не наборы данных или таблицы данных.

Кроме того, если вы возвращаете наборы данных, если вы строго не набираете каждый набор данных, вам придется написать много «подъемного» кода в вашей библиотеке, чтобы получить значения из наборов данных. С ORM и объектами вся тяжелая работа будет сделана за вас.

Наконец, с Linq в C# вы теперь получаете гораздо лучшую функциональность для работы с коллекциями (агрегаты, группировка, сортировка, фильтрация и т. д.), Которые могли дать наборам данных преимущество.

Код подъема? Чем Person.Name отличается от table.Rows [0] .Field <string> ("Name"), кроме синтаксиса? Конечно, это выглядит лучше, но, IMO, реальной выгоды нет. У умеренно продвинутого разработчика уже есть библиотека методов для получения данных из базы данных. Он не переписывает это для каждого проекта.

Robert C. Barth 30.12.2008 23:19

Основная проблема с table.Rows [0] ... заключается в том, что он не строго типизирован. Невозможно создать полезный List <T> из таблицы.

lomaxx 31.12.2008 01:45

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