Самым большим преимуществом 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.