Является ли набор данных ORM? - PullRequest
8 голосов
/ 18 марта 2009

Я немного запутался в наборе данных по сравнению с ORM (NHibernate или Spring.Net). Насколько я понимаю, ORM находится между прикладным уровнем и уровнем базы данных. Он сгенерирует команды SQL для прикладного уровня. Это то же самое, что делает набор данных? В чем разница между набором данных и ORM? Каковы преимущества и недостатки этих двух методов? Надеюсь, что эксперты здесь могут что-то объяснить.

Спасибо, Fakhrul

Ответы [ 6 ]

12 голосов
/ 18 марта 2009

Между ними существует БОЛЬШАЯ разница, прежде всего в модели программирования, которую они представляют:

  1. Набор данных основан на модели таблицы
  2. ORM (без указания конкретного продукта фреймворка) основан на модели предметной области.
  3. Существует еще один вид инструмента, который можно использовать в сценарии данных. Этот тип инструмента представляет собой Data Mapper (например, iBatis.NET)

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

В качестве небольшого объяснения можно сказать:

Настольная модель

- это модель, которая стремится представлять табличные данные в структуре памяти как можно ближе (и даже при необходимости). Таким образом, легко найти реализации, которые реализуют такие концепции как Таблица , Столбцы , Отношения На самом деле модель является структурой таблицы, поэтому ориентация объекта основана на что не на самих данных. Эта модель может иметь свои преимущества, но в некоторых случаях она может быть сложной для управления и сложной для применения концепций к содержащимся данным. Как сказано в предыдущих ответах, такие реализации, как набор данных, пусть или лучше, вынуждают вас подготовить (даже если с помощью инструмента) необходимые инструкции SQL для выполнения действий над данными.

ORM

- это модель, которая (как говорит mendelt передо мной ..), где Объекты отображаются непосредственно на объекты базы данных, главным образом, на таблицы и представления (даже если возможно отобразить даже функции и процедуры тоже). Обычно это делается двумя способами: с помощью файла сопоставления, который описывает сопоставление, или с помощью (в случае .NET или Java) атрибутов кода. Эта модель основана на объектах , которые представляют данные, поэтому ориентация на объекты может быть выполнена на них, как в обычных программах, это понятно с большим вниманием и осторожностью в некоторых случаях, но в целом, когда вы уверены в ORM это может быть действительно мощный инструмент! Даже ORM может быть тяжелым в управлении, если он не управляется и не разрабатывается должным образом, или лучше понимает природу, поэтому важно понимать методы, но я могу сказать по своему опыту, что ORM действительно мощный инструмент. В ORM инструмент в основном отвечает за генерацию инструкций SQL, необходимых для выполнения операций в коде, и в большинстве случаев ORM имеет средний язык (например, HQL) для выполнения операций над объектами.

MAPPER

Маппер - это инструмент, который не создает такие вещи, как ORM, но отображает рукописные инструкции SQL в объектную модель. Этот инструмент мог бы быть лучшим решением, когда нужно было писать вручную инструкции SQL, но он хотел спроектировать объектную модель приложения для представления данных. В этой «модели» объекты отображаются в инструкции и описываются в файле отображения (обычно это XML-файл, как это делают iBatis.Net или iBATIS (java)). Картограф позволяет вам определять гранулярные правила в инструкциях SQL. В этом сценарии может быть легко найти некоторые концепции ORM, например, управление сессиями.

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

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

4 голосов
/ 18 марта 2009

класс Dataset определенно не является ORM; ORM отображает реляционные данные в объектно-ориентированное представление.

Хотя это можно рассматривать как некую «единицу работы», поскольку она отслеживает строки, которые необходимо удалить / обновить / вставить.

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

Нет, наборы данных не являются ORM. Они могут выглядеть как ормы, потому что наборы данных отображают таблицы на объекты так же, как ORM, главное отличие заключается в том, на какие объекты они отображаются.

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

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

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

ORM основан на отображении между объектами и таблицами. Не тот случай для этого набора данных. Набор данных находится непосредственно в пути к таблице. ORM основан на минимуме сценария SQL. Но достаточно, чтобы использовать набор данных, который вы пишете в предложении SQL. Набор данных в этом случае не является ORM.

Посмотрите на набор данных и ORM .

1 голос
/ 18 марта 2009
0 голосов
/ 18 марта 2009

DataSet - это DTO, объект передачи данных. Сам DataSet ничего не может сделать. Вы можете использовать DataAdapter (используемого провайдера) для создания sql или вызова предварительно определенных запросов, хотя он по-прежнему ничего не делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...