亚音速Vs NHibernate

Dan*_*Dan 74 .net subsonic nhibernate orm

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

小智 84

我被问到很多这个问题,实际上归结为你想要多少钱.我无法告诉你Chris Cyvas对RE SubSonic扩展的评论是多么具有破坏性 - 从那以后我一直在回应这些:(.

这笔交易是 - 穿孔,SubSonic非常好.在项目增长方面 - 您使用的任何工具都需要您的关注.甚至NHibernate.

我在SubSonic 2.1上写了一篇关于如何使用DI(如同使用NHIb或任何工具一样)使用Repository模式的帖子:

http://blog.wekeroad.com/blog/subsonic-writing-decoupled-testable-code-with-subsonic-2-1/

我还写了一篇关于SubSOnic表现的文章:

http://blog.wekeroad.com/blog/subsonic-scaling/

希望这可以帮助.

  • 有偏见与否,我花了最后4个小时试图调查哪个更容易上手和使用,与NHibernate相比,SubSonic的学习曲线似乎非常小... (12认同)

Jon*_*way 45

如果您的项目使用ActiveRecord视图,数据库是您的模型,我建议使用SubSonic.你会得到每桌一个班级,一切都神奇地起作用.你当然可以调整和覆盖一些东西,但如果你(或你的项目)从根本上不同意每表类的方法,我会看看NHibernate,因为它从更复杂(但更灵活)的映射方法开始域模型到您的数据库.

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


Dan*_*Dan 31

它的价值......自从提出这个问题以来,我有机会更加使用这两种技术.如果你选择的这些技术很少,我必须坚持下去.确实NHibernate允许您的业务实体与您的数据库结构稍微耦合,但我仍然发现在许多情况下您仍然需要屈服于数据库的意愿.

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


Fry*_*ard 13

稍微偏离主题,但以类似的方式.您是否看过Castle ActiveRecord,它是在NHibernate之上编写的,无需花时间从代码到数据库创建XML映射.与NHibernate一样,您可以根据需要构建域对象,然后从此结构生成数据库模式.

使用ActiveWriter,一个贡献的工具,您可以轻松地从数据库映射到域对象.


小智 9

你可以考虑看一下Fluent NHibernate; 它使管理NHibernate变得轻而易举.不确定转换现有模式有多难,但如果你正在构建一个新的应用程序,那么定义域模型并在几乎任何你能想到的数据库服务器中生成数据库都是很好的.通过阅读其他评论,我认为Fluent NHibernate使NHibernate与SubSonic相提并论,易于配置.


小智 7

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

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

我知道我实际上没有回答你的问题,但我希望这仍然有帮助.


Chr*_*s S 7

我最近写了一篇关于.NET ORMs 的博客文章,里面有Subsonic,还有ActiveRecord.根据我的经验,它取决于项目正在做什么,如果你来自SQL背景,那么Subsonic工作得更好,但是NHibernate有更多的ontop.ActiveRecord适用于较小的项目,我不相信它对于大型项目比坚持NHibernate更快.


Jam*_*een 5

我已对两者进行了评估,并且我认为在不了解您的目标的情况下推荐一个而不是另一个是不公平的.在你的问题中,你很好地说明了这些差异,我认为这需要成为你的决定因素.就个人而言,我已经使用了两者,并将继续使用两者,具体取决于项目.

  • NHibernate是我对大型项目的选择,因为它使用了轻量级POCO.如果我要将"我相信"的ORM切换出来,这将更容易重构.
  • 当我有一个较小规模的项目时,SubSonic是我的选择.我相信性能明智的SubSonic可以很好地扩展.但是,我感觉与它紧密相连,因为它在我的项目中如此刻.在较小的项目中,我仍然可以将其切换出来,因为代码库非常小,它确实可以帮助我像宣传的那样删除代码.