Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

По-моему, за и против:

Pros

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

против

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

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

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

Ответ 3

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

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

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

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

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