假设编写nhibernate映射文件不是一个大问题....或者使用属性污染域对象也不是一个大问题....
优缺点都有什么?
有什么基本的技术问题吗?什么往往会影响人们的选择?
不太清楚所有的权衡是什么.
AR最大的优势在于它为您提供了现成的存储库,并为您提供会话管理.无论是中ActiveRecordBase
和ActiveRecordMediator
的,你会已经结束了NHibernate的下组装自己的礼物.避免XML映射是另一个优点.AR映射属性易于使用,但又足够灵活,甚至可以映射相当"遗留"的数据库.
AR的最大特点是它积极鼓励你错误地思考NHibernate.也就是说,因为默认会话管理是每次调用会话,所以您会习惯于持久化对象已断开连接,并且Save()
在发生更改时必须为d.这不是NHibernate应该如何工作的 - 通常你有每个工作单元的会话或请求或线程,并且对象在会话的生命周期中保持连接,因此更改会自动保持.如果你开始使用AR,然后弄清楚你需要切换到每个请求的会话以使延迟加载工作 - 这在文档中没有很好地解释 - 当你没有期待的对象时,你会得到一个令人讨厌的惊喜当会话刷新时保存.
请记住,Castle团队将AR作为Castle Monorail的补充产品,这是一个类似于Rails的.NET框架.它的设计考虑到了这种用途.它不能很好地适应更分层,分离的设计.
使用它是什么,但不要把它当作NHibernate的快捷方式.如果你想使用NH但是避免映射文件,请使用NHibernate Attributes或更好的Fluent NHibernate.
我发现ActiveRecord是一个很好的工具包,非常适合我用它的小/中项目.像Rails一样,它为您做出了许多重要的决定,这可以让您专注于解决问题.
在我看来,职业和缺点是:
优点
让您专注于手头的问题,因为许多决定都是为您做出的.
包括成熟,非常有用的基础结构类(存储库,验证等)
编写AR属性比编写XML或NHibernate.Mapping.Attributes恕我直言更快.
良好的文档和社区支持
使用其他NHibernate功能相当容易.
一个安全的开始.你有一个get-out子句.如果你用AR撞墙,你可以慢慢回到定制的NHibernate解决方案.
非常适合域优先开发(生成数据库).
您可能还想查找ActiveRecord模式的优缺点
缺点
你不能假装NHibernate不存在 - 你仍然需要学习它.
如果您已经有一个遗留数据库可以使用,那么可能效率不高.
不透明的持久性.
内置映射是全面的,但对于某些项目,您可能需要在某些地方恢复为NHibernate映射.我没有遇到过这个问题,只是一个想法.
总的来说,我真的很喜欢ActiveRecord,它总是节省时间,主要是因为我似乎乐于接受图书馆中的决策和工具,并且随后花更多的时间专注于手头的问题.
我会尝试一些项目,看看你的想法.