就个人而言,我认为Active Record模式本身和Castle's baby肯定有一些优势,例如:
- 简化配置
- AR模式 - '实体是独立的'。有时它只是项目的其他任何东西。
- 您可以在项目中快速开始开发和使用AR。只需定义正确的映射,添加一些配置,你就可以用实体做一些基本的东西了。那部分似乎比纯粹的nh更快。
- AR中的SessionScope + TransactionScope类已经为您服务。如果你不得不这样做的话,你必须自己写这个。支持事务继承。
- 所有Castle项目都很美妙。 AR + Facilities + Windsor =非常强大的堆栈。
- 新版本的AR(终于!)在NH 3.0之上运行。
但也有一些缺点:
- 开销的神话。我觉得这不是我可以定义的东西,但只是感觉所有这些会话管理,包装器等都需要花费一些东西。但我认为实际上这是非常难以捉摸的。
- 如果你需要做一些自定义的东西,你只需触摸nhibernate胆量。 AR似乎相当复杂。
- 没有第二次缓存支持
- AR映射不是POCO。在通过WCF序列化或仅在不同层之间发送时可能会出现问题。 NH并非如此。
- AR不是强制执行存储库/ dao类的OO方法的最佳方法。但这并不是什么新鲜事,因为它是AR模式的纯粹结果 - 你的对象知道如何保存或删除自己。但是当你的项目变得更大时,它就变得很痛苦。
所以最后,它是一个用于简单或中等复杂项目的优秀框架。它对asp.net/winforms有好处,没关系。使用纯NH,您必须编写更多代码以制作类似的应用程序。但如果你这样做,你会更快乐。因为你将能够控制一切。
与往常一样,这完全取决于您的偏好或项目。对于小型,快速的项目 - AR是方式,对于媒介 - 我会说NH是方式!
P.S。
哦,顺便说一句,AR完全相同的查询,所以就像使用nh与db交谈一样。 NH标度,城堡也是如此。只要避免'n + 1'问题并考虑懒惰你就应该好; P
P.S。
听Mauricio Scheffer,他真的知道他在写什么。