Каковы преимущества и недостатки использования Castle Active Record против Straight NHibernate? - PullRequest
17 голосов
/ 16 декабря 2008

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

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

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

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

Ответы [ 3 ]

21 голосов
/ 16 декабря 2008

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

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

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

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

15 голосов
/ 16 декабря 2008

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

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

Плюсы

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

против

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

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

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

0 голосов
/ 16 декабря 2008

Когда я начал использовать 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 может принести больше информации, чем я понимаю - я не знаю ничего другого , чем то, что есть на их сайте , но если это принесет больше информации, тогда потенциальные усыновители смогут легко увидеть это на своем сайте.

...