Почему мы до сих пор используем DataSets в .NET? - PullRequest
16 голосов
/ 16 февраля 2009

DataSets были одной из самых больших вещей в .NET 1.0, и даже сейчас, когда я использую .NET 3.5, я все еще вынужден использовать их ... особенно, когда мне приходится вызывать хранимый процесс, который возвращает набор данных, который я затем в конечном итоге придется вручную трансформироваться в объект, чтобы с ним было легче работать.

Мне никогда не нравились наборы данных, и я находил их раздражающими в использовании ... и в результате я старался сводить свои знания о них к минимуму (возможно, очень плохо!). Я также предпочитаю быстро преобразовывать их в объект или список объектов, чтобы я мог легко манипулировать ими в своем коде.

Переданы ли наборы данных по дате? С появлением картографов O / R, таких как NHibernate, мне интересно, исчезнут ли DataSets или есть место для них? В настоящий момент я разрываюсь между тем, стоит ли мне уделять время повторному посещению DataSets и изучению того, как правильно их использовать, или отстаю O / R mappers на 100% и просто отказываюсь от DataSets.

Предоставляют ли наборы данных что-либо, чего не могут предложить такие технологии, как NHibernate, LINQ и т. Д.? Если нет, то почему мы все еще используем их?

Ответы [ 9 ]

9 голосов
/ 24 марта 2009

К лучшему или к худшему, ответ прост. Когда вышла 2.0 Framework и TableAdapters были включены в процесс, стало невероятно легко получить ваше базовое приложение типа CRUD или даже титульную страницу, отображающую данные. Просто подключитесь к своему серверу, перетащите ваши таблицы, и структура была на месте, включая ссылки на внешние / первичные / уникальные ключи. Нужно выполнить обновления на этих данных? Используйте мастер, укажите существующие процедуры или позвольте мастеру сгенерировать специальные / хранимые процедуры для вас.

И все готово, подключите это к GridView, и вы сможете быстро сделать много вещей: прибегать к помощи, запрашивать, редактировать несколько записей, когда они отключены, и обновлять по одному или в большом количестве. Такое удобство трудно упустить, когда вы работаете над проектами, которые хотят сделать быстро. Кроме того, вещи в этом родном формате «DataTable» становятся удобными для махинаций XML, если это то, что вам нужно, так как модель DataSet использует XML для большого количества вещей.

Я признаю, что я не проверял последние версии ORM, и я не уверен, есть ли мастер для LINQ, который сделает это за несколько кликов. И большинство людей немного медленнее адаптируют новые технологии, так что легко увидеть, как они все еще интенсивно используются.

Видя, что новый сайт / проект службы динамических данных построен на основе LINQ to SQL или LINQ to EF, я думаю, что прилив может окончательно измениться на более новую модель.

6 голосов
/ 16 февраля 2009

Я никогда не использовал DataSet правильно (подключенный к SQL Server), но однажды это было полезно для конкретной необходимости. Я обнаружил, что DataSet и DataView - это довольно удобные и функциональные базовые классы для реализации уровня данных / BLL, пока я не смогу реализовать что-то действительно продуманное. Там есть множество функций, о которых вам следует знать, если не сказать больше.

6 голосов
/ 16 февраля 2009

Я думаю, что самая большая проблема с наборами данных в том, что они в основном побуждали вас создавать базы данных в памяти. Мне нравится, как Linq / entity удовлетворяют ваши потребности в данных, и они полагаются на работу стандартных классов .Net коллекций и обобщений.

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

2 голосов
/ 07 июня 2009

3 причины полюбить наборы данных:

  • Для winforms они поддерживают привязку данных / фильтрация, большинство ормов не
  • Многие сторонние инструменты (инструменты отчетности esp) имеют встроенную поддержку таблиц данных / наборов, а не простых объектов.
  • Во время отладки вы можете щелкнуть правой кнопкой мыши по заполненной таблице и просмотреть ее содержимое. Это настоящий экономит время.

В целом у них много функций. Мне не нравятся адаптеры. Я обычно пишу свои собственные адаптеры базы данных.

2 голосов
/ 16 февраля 2009

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

Если вы полностью игнорируете реляционные базы данных, для DataSets все еще используются:

  • Если вы пишете приложение для форм, предназначенное для загрузки и сохранения данных в файл, вы можете определить типизированный DataSet, а затем загрузить и сохранить его с помощью класса XmlDataDocument.

  • Crystal Reports может создавать отчеты, считывая наборы данных в памяти. Вы можете создать типизированный DataSet только для одного конкретного отчета и использовать язык .NET для написания сложной бизнес-логики для заполнения этого DataSet. Это избавляет вас от реализации бизнес-логики с использованием функций Crystal Reports (что может быть очень сложной задачей)

  • Вы можете присоединить DataGridView к DataSet с одной строкой кода, чтобы получить дрянной пользовательский интерфейс, который, тем не менее, может выполнить ту работу, которая вам нужна. Хорошо для таких вещей, как внутренние инструменты тестирования. (Недостаточно хорош для отправки клиенту).

2 голосов
/ 16 февраля 2009

Я думаю, что я в одной лодке: я очень редко использую наборы данных, и я, конечно, не претендую на звание эксперта по модели адаптера (я думаю, "Fill" - единственный метод, который я действительно использовал в производстве) - но они иногда имеют некоторое применение. Например, если вам нужно выполнить какой-то специальный SQL-код, вы не можете предсказать схему (и поэтому ORM не помогает) и не хотите связываться с IDataReader и т. Д. Для простого небольшого набора данные.

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

1 голос
/ 24 марта 2009

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

0 голосов
/ 05 февраля 2014

Для профессионалов-программистов. Они используют DataSet, потому что объект DataSet предназначен для поощрения использования оптимистичного параллелизма для длительных операций, таких как удаленное взаимодействие с данными и взаимодействие с данными.

0 голосов
/ 07 июня 2009

Я использую Typed DataSets для действительно низкого уровня рычага. Я знаю, что это не так хорошо, но попробуйте объяснить это большим кадрам ..
Таким образом, вместо того, чтобы изменить мир и представить какой-нибудь не-Microsoft инструмент oss (или, наконец, перейти с .net 2.0 на 3.5 и использовать l2s или ef), я просто использую набор данных для сохранения результатов запроса и легко связываю их с сетками. , текстовые поля и комбо-боксы, где это необходимо. Я нахожу возможность позже использовать что-то вроде

MyDataSet.MyDataTableRow row = // whatever
if (row.Price > 100) // do something

очень полезно.

...