Скрытие того факта, что класс является активной записью
Я использую Castle ActiveRecord, но оборачиваю его в свой слой персистентности, потому что хочу скрыть этот факт от кода приложения. Тем не менее, все мои сущности наследуются от ActiveRecordBase<T>
, так что мой выбор ORM вытекает из приложения. Что мне особенно не нравится, так это множество методов, которые разоблачают мои сущности.
Как я могу использовать ActiveRecord без наследования от ActiveRecordBase?
Я знаю, что некоторая часть абстракции утечет, потому что мои объекты украшены атрибутами ActiveRecord, однако я не считаю эту часть значимой.
3 ответа
При использовании Castle ActiveRecord ваши сущности не должны наследоваться от базового класса. Ты можешь использовать ActiveRecordMediator<T>
вместо. Возможно, эта статья из руководства поможет.
Вы можете использовать композицию вместо наследования - ваш бизнес-объект в основном оборачивает ваш активный объект записи и делегирует ему обязанности по сохранению.
Если вы используете простой NHibernate, вам не нужно использовать декораторы и т. Д., Вам просто нужно свернуть свои собственные файлы hbm.xml, которые очень просты, и существует множество инструментов, которые могут вам помочь.
Обратите внимание, хотя это и не дает прямого ответа на ваш вопрос, я поставил его там, потому что использование собственной абстракции NHibernate и изучение NH хорошо - это хороший навык, и, если вы потратите время, вы никогда больше не будете использовать AR (ну, если только это не небольшой проект, вы хочу быстро раскатать).
У меня есть свой собственный слой абстракции NH, некоторые примеры кода и т. Д. Можно найти в моем блоге здесь: http://www.picnet.com.au/blogs/Guido/post/2009/07/08/Code-Generated-DAL-%28Data-Access-Layer%29-using-ORM-Article-1.aspx
Хотя это, вероятно, чрезмерно, оно показывает, что хорошее понимание NH может позволить вам сделать в будущем.
Guido