假设编写nhibernate映射文件不是一个大问题......或者使用属性污染域对象也不是一个大问题....
有什么优点和缺点?
有任何基本的技术问题吗?什么往往会影响人们的选择?
不太清楚所有的权衡是什么。
答案 0 :(得分:21)
最大的AR专家是它为您提供了现成的存储库,并为您负责会话管理。 ActiveRecordBase<T>
和ActiveRecordMediator<T>
中的任何一个都是你最终在NHibernate下组装的礼物。避免XML映射是另一个优点。 AR映射属性易于使用,但又足够灵活,甚至可以映射相当“遗留”的数据库。
AR的最大特点是它积极鼓励你错误地思考NHibernate。也就是说,因为默认会话管理是每次调用会话,所以您会习惯于持久化对象已断开连接,并且在发生更改时必须为Save()
d。这不是NHibernate应该如何工作的 - 通常你有每个工作单元的会话或请求或线程,并且对象在会话的生命周期中保持连接,因此更改会自动保持。如果你开始使用AR,然后弄清楚你需要切换到每个请求的会话以使延迟加载工作 - 这在文档中没有很好地解释 - 当你没有期待的对象时,你会得到一个令人讨厌的惊喜当会话刷新时保存。
请记住,Castle团队将AR作为Castle Monorail的补充产品,这是一个类似Rails的.NET框架。它的设计考虑到了这种用途。它不能很好地适应更分层,分离的设计。
使用它是什么,但不要把它当作NHibernate的快捷方式。如果你想使用NH但是避免映射文件,请使用NHibernate Attributes或更好的Fluent NHibernate。
答案 1 :(得分:15)
我发现ActiveRecord是一个很好的工具包,非常适合我用它的小/中项目。像Rails一样,它为您做出了许多重要的决定,这可以让您专注于解决问题。
在我看来,职业和缺点是:
<强>赞成强>
<强>缺点强>
一般来说,我真的很喜欢ActiveRecord,它总是节省时间,主要是因为我似乎很高兴接受图书馆中的决策和工具,然后花更多时间专注于问题在手里。
我会尝试一些项目并看看你的想法。
答案 2 :(得分:0)
当我开始使用NHibernate时,在我编写Mapping文件并制作课程之前,我没有了解Castle ActiveRecord。那时,我无法辨别出Castle Activerecord会给我什么,所以我没有使用它。
我第二次使用NHibernate时,我只是使用myGeneration来制作映射文件和类,只需查看我的数据库即可。这节省了很多时间,让我(再一次)不用担心Castle Active Record。
实际上,大部分时间用于制作自定义查询,而Castle Active Record不一定有助于此 - 如果你将myGeneration与NHibernate一起使用,你将绕过大部分工作无论如何你还需要做。
编辑:我不想成为myGeneration或NHibernate的啦啦队长。我只是使用这个工具,让我能够快速轻松地完成工作。我花在编写数据访问代码上的时间越少越好。这并不意味着我无法做到 - 但每次编写新应用程序时重新发明轮子几乎没有意义。在需要的地方编写SQL查询和存储过程,而不是在其他地方编写。如果您正在进行CRUD操作,则可以使用ORM。
编辑#2:城堡活动记录可能会带来比我意识到的更多 - 我不太了解其他than what's on their website,但如果它确实带来了更多的表,那么它将有助于潜在的采用者能够在他们的网站上看到它。