Что такого замечательного в ORM? - PullRequest
8 голосов
/ 09 февраля 2010

Итак, я прислушиваюсь к стене и надеюсь, что кто-нибудь может прийти помочь либо снять стену, либо помешать моей голове двигаться !!

За последние 3/4 недели я изучал готовность ORM к новому проекту. ORM должен сопоставляться с существующей, большой и устаревшей базой данных SQL.

Итак, я попробовал Subsonic. Мне очень понравились v2 и v3 после того, как моддинг хорошо работал с VB, и именованные схемы в SQL работали нормально. Тем не менее, отсутствие гибкости в том, что отдельные имена свойств сущностей и имена столбцов заставили меня потрепаться (извините, Роб).

Я попробовал Entity Framework, но, как и другие, обнаружил, что в некоторых областях его не хватает.

Так что я прикусила пулю и попробовала nHibernate, но примерно через неделю, чтобы заставить его работать так, как мне нравилось (с помощью Codesmith для создания классов / hbms для меня), я разочарована временем, которое требуется для запуска (сборки config object), несмотря на попытки ряда хитростей сократить это время.

По сути, я создал класс DAL, которым я могу поделиться между приложениями и веб-сайтами. Я лаю не на том дереве? Для старого проекта с сотнями таблиц я должен вернуться на ado.net и использовать DTO? Aarrgh!

Извините за случайный стиль вопроса. У меня осталось не так много волос, и я бы хотел сохранить то, что у меня есть !!

Заранее спасибо, Эд

PS. Я должен добавить, что я очень хорошо знаю SQL и не боюсь испачкать руки для написания быстрых запросов. Во всяком случае, мне не нужно прятаться от SQL

Ответы [ 4 ]

8 голосов
/ 09 февраля 2010

ORM давайте вам:

  1. Чтобы отобразить строки таблицы в объекты, которые являются работающими частями объектно-ориентированного программирования.
  2. Для автоматической навигации по объектным отношениям
  3. Чтобы легко добавлять, редактировать и удалять строки таблицы
  4. Для запроса базы данных более интуитивным способом, так как вам не нужно думать о соединениях (это будет зависеть от ORM и метода запроса)
  5. Для прозрачной обработки кэша L1 и L2.

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

PS: Я согласен с Дмитрием относительно времени запуска NHibernate (см. Комментарии к вопросу). Кроме того, ты пробовал Свободный NHibernate ? Свободное владение NHibernate впечатляет легко. Я не мог поверить своим глазам, когда я впервые нанес на карту базу данных. Это даже проще, чем проприетарные ORM, такие как DevExpress XPO.

2 голосов
/ 09 февраля 2010

Самым большим преимуществом инструмента ORM является то, что он поможет вам правильно наложить ваше приложение. Большинство проектов в настоящее время используют уровень данных для подключения к базе данных. Вы начинаете с инструмента ORM для создания классов, которые соответствуют вашим объектам базы данных. Затем вы определяете интерфейс, используя эти методы. Весь персистентный код использует методы этого интерфейса. Таким образом, уровень бизнес-логики связан только с этим интерфейсом более высокого уровня и ему ничего не нужно знать о базе данных. На самом деле не должно быть никакой зависимости от ADO.NET или даже от NHibernate.

Еще одним преимуществом инструментов ORM является то, что вы отсоединяете свое приложение от сервера базы данных. Вы можете изменить движок БД и по-прежнему использовать тот же код. Также существует не только сложность SQL, которую ORM скрывает от вас. Он также может помочь вам с логикой транзакций и пулами соединений.

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

1 голос
/ 09 февраля 2010
1 голос
/ 09 февраля 2010

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

Одним из решений, которое мне нравится, является LINQ2SQL. Это выделяется как тонкий слой о хранимых процедурах или представлениях. Он действительно прост в использовании и не пытается скрыть SQL.

...