C#活动记录实现

时间:2011-04-08 23:56:26

标签: nhibernate castle-activerecord

几周前我偶然发现了Castle Active Record并认为这对于与数据驱动的应用程序相关的费力的CRUD任务来说似乎是一个有趣的解决方案。它现在看起来很成熟,我正在考虑将它用于我正在开发的应用程序的数据层,但我想知道:

  1. 它的规模如何? (即NHibernate上的额外层是否能很好地扩展)
  2. 一旦你在开发方面做得太过容易改变方向,它的最大限制是什么会导致挫败感?
  3. 使用没有Active Record层的直接NHibernate是一个更好的长期选择吗?

1 个答案:

答案 0 :(得分:4)

就个人而言,我认为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,他真的知道他在写什么。