2008-12-15 156 views

回答

21

AR最大的优点是它可以为您提供现成的存储库并为您管理会话管理。 ActiveRecordBase<T>ActiveRecordMediator<T>中的任何一个都是你在NHibernate下自己组装的礼物。避免使用XML映射是另一个好处。 AR映射属性使用简单,但足够灵活,可以映射相当“传统”的数据库。

AR最大的缺点就是它积极鼓励你不正确地思考NHibernate。也就是说,因为默认会话管理是每次通话会话,所以您习惯了持久对象已断开连接的想法,并且在发生更改时必须为Save()。这不是NHibernate应该如何工作的 - 通常情况下,你需要每个工作单元的会话或请求或线程,并且对象在会话的生命周期中保持连接状态,所以更改会自动保存。如果你开始使用AR,然后找出你需要切换到session-per-request来进行懒加载工作 - 这在文档中没有很好的解释 - 当你不期待的对象时,你会得到一个令人讨厌的惊喜在会话刷新时进行保存。

请记住,城堡团队将AR作为Castle Monorail的补充产品,这是一个类似于Rails的.NET框架。它是为了这种用途而设计的。它不适应更分层的,分离的设计。

使用它是什么,但不要认为它是NHibernate的捷径。如果你想使用NH,但避免映射文件,请使用NHibernate Attributes或更好的Fluent NHibernate。

0

当我开始使用NHibernate时,我没有了解Castle ActiveRecord,直到我编写了我的Mapping文件并创建了我的类。那时,我看不出Castle Activerecord会给我什么,所以我没有使用它。

第二次使用NHibernate时,我只是简单地使用myGeneration来制作映射文件和类,只是让它看着我的数据库。这节省了很多时间,并且让我(再一次)不用担心Castle Active Record。

实际上,你的大部分时间都花费在制作自定义查询上,而Castle Active Record不一定能够帮助你 - 如果你在NHibernate中使用myGeneration,你会绕过大部分无论如何你需要做的工作。

编辑:我不想看起来像myGeneration或NHibernate啦啦队长。我只是使用这个工具,可以让我快速轻松地完成我的工作。我花更少的时间编写数据访问代码就越好。这并不意味着我无法做到这一点 - 但是每次编写新应用程序时重新发明轮子都没什么意义。在需要的地方写入SQL查询和存储过程,而没有其他地方。如果您正在进行CRUD操作,则需要使用ORM。

编辑#2:Castle Active Record可能会给我带来比我认识的更多 - 我不知道其他than what's on their website,但如果它确实带来更多的表格,那么它会帮助潜在的采用者能够随时在他们的网站上看到。

15

我发现ActiveRecord是一个很好的工具包,非常适合我使用它的中/小型项目。像Rails一样,它为你做出许多重要的决定,这会让你专注于解决问题。

在我看来亲的利弊是:

优点

  • 让您专注于手头的问题,因为很多决策是为你做。
  • 包括成熟,非常实用的基础设施类(存储库,验证等)
  • 写入AR属性比编写XML或NHibernate.Mapping.Attributes更快。
  • 良好的文档和社区支持
  • 它相当容易使用其他NHibernate功能。
  • 一个安全的开始。你有一个退出条款。如果你用AR打墙,你可以慢慢回到定制的NHibernate解决方案。
  • 非常适合领域优先开发(生成db)。
  • 你也可能想看看了ActiveRecord pattern

缺点的优点和缺点

  • 你不能假装NHibernate的是不存在的 - 你仍然需要学习。
  • 如果您已经有一个遗留数据库可用,可能不会如此高效。
  • 不透明持久性。
  • 内置映射是全面的,但对于某些项目,您可能需要恢复到地点的NHibernate映射。我没有这个问题,但只是一个想法。

在一般情况下,我真的很喜欢的ActiveRecord,它一直是一个节省时间,主要是因为我似乎高兴地接受烤成库中的决策和工具,并随后将更多时间专注于手头的问题。

我想尝试一些项目,看看你的想法。

相关问题