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

StackOverflow https://stackoverflow.com/questions/369978

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

На мой взгляд плюсы и минусы:

Плюсы

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

Минусы

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top