我正在使用Castle ActiveRecord,但将其包装在我自己的持久层中,因为我想从应用程序代码中隐藏这个事实。但是,我的实体都继承自ActiveRecordBase<T>
,因此我选择的ORM正在泄露给应用程序。我特别不喜欢的是从我的实体中暴露出来的一系列方法。
如何在不继承ActiveRecordBase的情况下使用ActiveRecord?
我知道抽象的某些部分会泄漏,因为我的实体用ActiveRecord属性修饰,但我不认为这部分有意义。
答案 0 :(得分:3)
使用Castle ActiveRecord时,您的实体不必从基类继承。您可以改用ActiveRecordMediator<T>
。也许this article from the manual会有所帮助。
答案 1 :(得分:2)
您可以使用组合而不是继承 - 您的业务对象基本上包装您的活动记录对象并将持久性职责委托给它。
答案 2 :(得分:0)
如果您只使用简单的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的良好理解可以让您在将来做什么。
圭