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

===============>>#1 票数: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/

希望这可以帮助。

===============>>#2 票数:45

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

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

===============>>#3 票数:31

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

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

===============>>#4 票数:13

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

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

===============>>#5 票数:9

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

===============>>#6 票数:7

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

===============>>#7 票数:7

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

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

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

===============>>#8 票数:5

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

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

===============>>#9 票数:4

再次稍微偏离主题,但我将第二个Castle ActiveRecord - 而不是使用数据库作为您的模型(Subsonic方法)或花费数小时的XML意大利面(NHibernate方法),您只需将属性放在模型类上。

您甚至可以使用ActiveRecord为您生成数据库架构

我们现在已经在很多项目上使用了这种方法,其好处如下:

  • 如果将来需要,可轻松升级到NHibernate
  • 支持简单的继承模型 - 例如。 车 - >车辆
  • 它生成的模式最有可能是你创建它的方式,因此你可以花更多的时间来构建应用程序,而不是担心保持模型/数据库同步。

===============>>#10 票数:3

我认为你几乎已经钉了它。 Subsonic生成代码,因此您的业务对象将反映您的数据库结构。 nHibernate使用映射文件将您的业务对象映射到数据库,以便您可以按照自己喜欢的方式构建对象。

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

===============>>#11 票数:3

在考虑ActiveRecord时,请考虑您的团队和项目规模。

根据我的经验,ActiveRecord是一个基于NHibernate的抽象,在尝试更复杂的场景时会像筛子那样开始泄漏。

如果你有一个中等到非常复杂或非直接的架构,坚持使用NHibernate。 你可以将它切成几乎完美的切片。

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

===============>>#12 票数:3

我们用亚音速训练,现在正试图评估我们是否会转向nhibernate,因为我们处于亚音速的痛点。

我们的另一个选择是创建一些中间点,我们使用subsonic来查询和加载任意对象及其“执行类型列表”功能,该功能执行基于名称的任意linq样式sql语句的映射。 或者尝试在nhibernate中重新创建一些并重构其余部分。

因此我认为亚音速在小型应用程序中有意义,但亚音速应用程序的维护变得非常繁琐,我们在重叠的验证代码和代码触发事件的前/后时特别困难。 对于一个活动的记录模式,亚音速肯定是80%,但是会以一种不稳定的方式做某些事情,并阻止你对你的继承层次结构进行任何真正的控制,因为每个类都必须继承一个表来回到那个表。

===============>>#13 票数:2

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

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

选择ORM的决定并不 仅仅取决于ORM本身。

===============>>#14 票数:2

拥抱阻抗不匹配!

看一下这个

:)

或者不。 如果您想要表现,请自己动手。 如果您想快速轻松,请使用NHibernate和ActiveRecord。 如果你喜欢假装你真的知道在数据访问级别上发生了什么,那么使用NHibernate并整天坐在XML上以获得很多很多...或者只是......错误...自己做 - ADO.Net FTW!

===============>>#15 票数:0

我在这个主题上得到的建议是,Subsonic不会扩展到处理更复杂的场景,所以如果你沿着这条路走下去,你最终会找到一份试图交换到更高级的ORM的工作。

因此,我更感兴趣的是将NHibernate用于复杂的情况,使用Castle Active Record来处理更简单的情况,并密切关注Fluent NHibernate,这将使NHibernate映射变得更加容易(特别是一旦基于约定的映射支持得到改进)。

  ask by Dan translate from so

未解决问题?本站智能推荐: