亚音速与NHibernate

什么时候使用这些工具中的一种转向另一种工具?我发现Subsonic在快速完成任务方面非常有用,但是在大型项目中它往往不能扩展,并且它将域模型与数据库模型联系在一起。这就是Nhibernate进来的地方,因为它为您提供了与您的数据库模型无关的轻量级POCO,但设置时间更长。

0
额外 编辑
意见: 1

13 答案

我们用亚音速引导,现在正试图评估我们现在是否处于亚音速的痛点之下,是否要切换到nhibernate。

我们的另一种选择是创建一些中间地带,我们使用亚音速来查询和加载任意对象,并使用它们的“执行类型列表”功能执行基于名称的映射关闭任意linq样式的sql语句。或者尝试在nhibernate中重新创建其中的一部分,然后重构其余部分。

所以我说subsonic在小应用程序中是有意义的,但亚音速应用程序的维护变得非常多毛,我们有特别困难的时间重叠验证代码,以及在代码触发事件中的前/后发布。对于一个活跃的记录模式,亚音速绝对是80%,但是却有些片面,并且阻止了你对继承层次的任何实际控制,因为每个类都必须继承一个表以返回该表。

0
额外

我觉得你几乎可以肯定它。 Subsonic生成代码,因此您的业务对象将反映您的数据库结构。 nHibernate使用将业务对象映射到数据库的映射文件,因此您的对象可以按照您的喜好进行结构化。

这个项目有多大?是否需要长期支持? Subsonic的成本效益是否会抵消任何潜在的扩展问题?

0
额外

稍微偏离主题,但情况类似。你看过 Castle ActiveRecord ,它是写在 NHibernate ,无需花时间从代码创建XML映射到数据库。就像NHibernate一样,您可以根据需要构建域对象,然后根据此结构生成数据库模式。

通过使用 ActiveWriter ,一个贡献工具,您可以轻松地将数据库映射到域对象。

0
额外
我现在正在与CAR一起试点项目。我选择它是因为我喜欢ActiveRecord的概念,并且像NHibernate一样进行了测试。如果我最终不喜欢CAR,我可以退回到纯粹的NHibernate。这给了我一个安全的退出 - 我喜欢这个。我会在几个月内尝试Subsonic来进行比较。
额外 作者 BuddyJoe,

对于它的价值......自问这个问题以来,我有机会使用这两种技术。如果你选择的技术很少,我必须留下来。当然,NHibernate允许你的业务实体与你的数据库结构稍有关系,但是我仍然发现在很多情况下你仍然需要屈从于数据库的意愿。

在我看来,从数据库模型完全分离领域模型的唯一方法是编写自己的 DTOS (本质上是用于传递数据的POCO),然后将它们映射回您的数据层中选择的ORM。但在大多数情况下,这种方法会让我比它的价值更加麻烦。

0
额外

如果您的项目与ActiveRecord视图一起使用,那么我会推荐SubSonic,即数据库是您的模型。你会得到每桌一个类,一切都只是神奇的作品。你当然可以调整和重写一些东西,但是如果你(或者你的项目)根本不同意每个表的类的方法,我会看看NHibernate,因为它开始于更复杂(但更灵活)的映射方法领域模型到您的数据库。

如果您使用的是一个相对简单的数据库(如在您的控制之下,您可以在不向数据库部门监督审查委员会发送八个表单的情况下更改列),我建议从SubSonic开始,如果SubSonic没有转向NHibernate满足您的需求。

0
额外

写道一篇博文,最近有关于其中有Subsonic的.NET ORM和ActiveRecord。根据我的经验,这取决于项目在做什么,如果你来自SQL背景,但Subsonic的工作要好得多,但NHibernate有更多的优势。 ActiveRecord适用于较小的项目,我不相信大型项目比坚持NHibernate更快。

0
额外
您提供的链接不起作用。你的意思是? shrinkrays.net/articles/a-look-at-dotnet- orms.aspx
额外 作者 kimsk,

我相信你应该坚持一个你可以利用最好的方法。最终目标是生产力和良好的表现质量代码。如果你知道SubSonic进出,那就坚持下去,如果你深入了解NHibernate,就坚持使用NHibernate。这是非常主观的问题。您还应该考虑到您的团队成员具有专业知识的事实。如果你擅长它,你将能够轻松地维护它。

我见过使用SubSonic的大型项目,而NHibernate已经非常有名并且被广泛使用。

挑选ORM的决定不   完全取决于ORM本身。

0
额外

我对两者都进行了评估,我认为如果不理解你的目标是什么,那么推荐一个就不太公平。在你的问题中,你说得很好,我相信这需要成为你的决定性因素。就我个人而言,我已经使用了两个,并将继续使用这两个取决于项目。

  • NHibernate是我选择大型项目的原因,因为它使用轻量级POCO。如果我要把我的ORM切换出来,“我相信”这会更容易重构。
  • 当我有一个较小规模的项目时,SubSonic是我的选择。我相信SubSonic的性能表现非常好。不过,我觉得它很紧密,因为它刻在我的项目中。在较小的项目中,我仍然可以将其切换出来,因为代码库非常小,它确实可以帮助我将广告中的代码拆分出来。
0
额外

我无法给出一个很好的比较,因为我还没有在项目中实际使用过NHibernate,但是我已经使用了SubSonic,并且对此非常满意。到目前为止,我在使用它时没有遇到任何重大障碍。

查看这篇文章来自SubSonic的创造者之一Rob Conery。他谈到了如何从应用程序的其余部分分离SubSonic代码。他甚至提到了这样的事实,即这种架构可以让你稍后将SubSonic换成其他数据访问层,例如NHibernate或LINQ to SQL。

我知道我没有真正回答你的问题,但我希望这仍然有帮助。

0
额外

再次略带争议,但我会第二次 Castle ActiveRecord - 而不是使用数据库作为你的模型(亚音速方法),或者花费数小时在XML spaghetti(NHibernate方法)中,你只需在模型类中放置属性即可。

你甚至可以让ActiveRecord 生成数据库模式为你。

我们现在已经在很多项目中使用了这种方法,其优点如下:

  • Easy upgrade path to NHibernate if required in the future
  • Support for simple inheritance models - eg. Car -> Vehicle
  • The schema it generates is most likely how you would have created it anyway, so you can spend more time building the app rather than worrying about keeping your model/db in sync.
0
额外

在考虑ActiveRecord时考虑你的团队和项目大小。

根据我的经验,ActiveRecord是NHibernate的一个抽象概念,当尝试更复杂的场景时,它开始像筛子一样泄漏。

如果你有一个中等到非常复杂或非直接的模式,坚持使用NHibernate。你可以切片并将其切成接近完美。

另一个可能会遇到麻烦的地方是当你需要一个适度复杂的查询时。 ActiveRecord隐藏了很多NHibernate的实现......但是如果你对HQL完全不熟悉,你会需要它来进行复杂的查询,这将变得非常困难。小心团队成员不要只是在边缘而不是学习NHibernate和HQL。

0
额外

我对这个主题的建议是,Subsonic不能扩展来处理更复杂的场景,所以如果你顺着这条道路走下去,你最终会得到一个尝试转换到更高级的ORM的工作。

因此,我更感兴趣的是在复杂情况下使用NHibernate,为更简单的情况使用Castle Active Record,并且关注Fluent NHibernate,这应该使NHibernate映射变得更容易(尤其是一旦基于约定的映射支持得到改进)。

0
额外
如果您有亚音速缩放问题的证据,请提供。我没有亲身经历过任何SubSonic可扩展性问题。
额外 作者 Jim Geurts,
“Subsonic不能扩展以处理更复杂的场景”问题在于,只是说它毫无意义。仍然缺乏可信的证据表明党卫军不能扩大规模。我想这是证明有时只是在互联网上说点什么就够了。
额外 作者 CarmineSantini,
0
额外
Stephen Forte现在(截至2010年12月)说:“随着当今新一代的ORM工具不断发展,它们变得更加灵活和易于使用,促使更多开发人员再次考虑将ORM集成到其应用程序体系结构中”。没有什么时间能够让一个人感受到他的感觉! :-) devproconnections.com/article/tools-and-products/…
额外 作者 rsenna,