假设写入nhibernate映射文件不是一个大问题....或污染你的属性域对象也不是一个大问题要么...使用Castle Active Record vs Straight NHibernate有什么优点和缺点?
有什么优点和缺点?
是否有任何根本的技术问题?什么会影响人们的选择?
不太清楚所有的折衷是什么。
假设写入nhibernate映射文件不是一个大问题....或污染你的属性域对象也不是一个大问题要么...使用Castle Active Record vs Straight NHibernate有什么优点和缺点?
有什么优点和缺点?
是否有任何根本的技术问题?什么会影响人们的选择?
不太清楚所有的折衷是什么。
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。
当我开始使用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,但如果它确实带来更多的表格,那么它会帮助潜在的采用者能够随时在他们的网站上看到。
我发现ActiveRecord是一个很好的工具包,非常适合我使用它的中/小型项目。像Rails一样,它为你做出许多重要的决定,这会让你专注于解决问题。
在我看来亲的利弊是:
优点
缺点的优点和缺点
在一般情况下,我真的很喜欢的ActiveRecord,它一直是一个节省时间,主要是因为我似乎高兴地接受烤成库中的决策和工具,并随后将更多时间专注于手头的问题。
我想尝试一些项目,看看你的想法。