Каковы плюсы и минусы использования Castle Active Record по сравнению с Straight NHibernate?
-
21-08-2019 - |
Вопрос
Предполагая, что написание файлов сопоставления 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 может принести больше пользы, чем я предполагаю — я не знаю многого другого. чем то, что на их сайте, но если это действительно принесет больше пользы, то это поможет потенциальным пользователям легко увидеть это на своем сайте.