Каковы плюсы и минусы использования Castle Active Record против Straight NHibernate?

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

Каковы плюсы и минусы?

Есть ли какие-то принципиальные технические проблемы? Что влияет на выбор людей?

не совсем уверен, что все компромиссы.

15.12.2008 22:53:05
3 ОТВЕТА
РЕШЕНИЕ

Самым большим преимуществом AR является то, что он предоставляет вам готовый репозиторий и заботится об управлении сессиями для вас. Любой из ActiveRecordBase<T>и ActiveRecordMediator<T>это подарок, который вы бы в итоге собрали под NHibernate. Избегание отображения XML - еще один плюс. Атрибуты AR-отображения просты в использовании, но достаточно гибки, чтобы отображать даже довольно «устаревшие» базы данных.

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

Имейте в виду, что команда Castle написала AR как дополнительный продукт для Castle Monorail, который представляет собой Rails-подобный фреймворк для .NET. Он был разработан с учетом такого рода использования. Он плохо адаптируется к более многослойной, отделенной конструкции.

Используйте его таким, какой он есть, но не думайте об этом как о ярлыке NHibernate. Если вы хотите использовать NH, но избегать сопоставления файлов, используйте атрибуты NHibernate или лучше Fluent NHibernate.

21
16.12.2008 10:09:20

Когда я начал использовать NHibernate , я не узнал о Castle ActiveRecord, пока не написал свои файлы Mapping и не сделал свои уроки. В тот момент я не мог заметно различить, что мне даст Castle Activerecord, поэтому я не использовал его.

Во второй раз, когда я использовал NHibernate, я просто использовал myGeneration для создания файлов сопоставления и классов, просто просматривая мою базу данных. Это само по себе сэкономило много времени и позволило (еще раз) не беспокоиться о Castle Active Record.

В действительности, большая часть вашего времени будет потрачена на создание пользовательских запросов, и Castle Active Record не обязательно поможет с этим - если бы вы использовали myGeneration с NHibernate, вы бы проигнорировали большую часть работы нужно делать в любом случае.

Редактировать: я не хочу казаться болельщиком ни для myGeneration, ни для NHibernate. Я просто использую инструмент, который позволяет мне быстро и легко выполнять свою работу. Чем меньше времени я трачу на написание кода доступа к данным, тем лучше. Это не значит, что я не могу этого сделать - но нет смысла изобретать велосипед каждый раз, когда вы пишете новое приложение. Пишите SQL-запросы и хранимые процедуры, где это необходимо, а не где-либо еще. Если вы выполняете операции CRUD, ORM - это путь.

Edit # 2: Castle Active Record может принести больше на стол, чем я понимаю - я не знаю ничего, кроме того, что на их веб-сайте , но если это принесет больше на стол, то это поможет потенциальным усыновителям быть в состоянии легко увидеть это на их сайте.

0
15.12.2008 23:42:45

Я обнаружил, что ActiveRecord - хороший набор и очень подходит для небольших / средних проектов, для которых я его использовал. Как и Rails, он принимает много важных для вас решений, благодаря чему вы сосредоточиваетесь на сути проблемы.

На мой взгляд, за и против:

Pros

  • Позволяет сосредоточиться на проблеме в руке, потому что многие решения принимаются за вас.
  • Включает в себя зрелые, очень полезные классы инфраструктуры (репозиторий, валидации и т. Д.)
  • Запись атрибутов AR быстрее, чем запись XML или NHibernate.Mapping.Attributes IMHO.
  • Хорошая документация и поддержка сообщества
  • С ним довольно легко использовать другие функции NHibernate.
  • Безопасное начало. У вас есть пункт выхода. Вы можете медленно вернуться к индивидуальному решению NHibernate, если ударите стены с помощью AR.
  • Отлично подходит для первичной разработки (создание базы данных).
  • Возможно, вы также захотите посмотреть преимущества и недостатки шаблона ActiveRecord.

Cons

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

В общем, мне очень нравится ActiveRecord, и он всегда экономил время, в основном потому, что я, кажется, с радостью принимаю решения и инструменты, запеченные в библиотеке, и впоследствии трачу больше времени на решение проблемы.

Я бы попробовал несколько проектов и посмотрю, что вы думаете.

15
15.12.2008 23:46:15