我一直在简要介绍一下NHibernate和Linq2Sql。我也打算看一下实体框架。
当我谈到这些ORM时,提出的问题是“它们无法扩展”,它们也可以吗?从Google我得到的印象是他们能够很好地扩展,但最终我认为必须付出代价,是否值得为更简单的业务层付费。
答案 0 :(得分:5)
这是一个很好的问题,恕我直言,他们可以像任何自定义DAL一样扩展。我只使用了nHibernate,所以我只关注它以及它有助于扩展系统的功能。
现在有了这个说法,我认为最初调整自定义DAL层更容易,因为它与它的构造密切相关并可以微调它;但是,一个好的ORM会提供大量的钩子,让你可以优化很多。你只需花一些时间学习它。
我还认为,如果您有一个性能关键的代码区域,并且无法让ORM在您的要求范围内工作,那么对于应用程序的这个小区域,您可以自定义构建自己的DAL层。如果您正在使用一个像样的设计模式,例如工厂创建的存储库,那么您需要做的就是更换存储库的实现
答案 1 :(得分:2)
Hibernate Shards正在ported to NHibernate,这将允许水平缩放。
还有一些非常酷的黑客如this one来实现分片。
所以答案是肯定的,NHibernate可以用持久无知且完全透明的方式进行扩展。
答案 2 :(得分:1)
说在ORM中构建的应用程序不能很好地扩展,这是完全错误的。当然,在此之前,粗心或懒惰的开发人员通过编写生成非常低效的SQL的代码来滥用ORM。构建高性能应用程序意味着了解所有可爱的抽象实际上做什么的内容。但是,避开这个陷阱并不需要太多。使用ORM并不意味着永远不会打开SQL分析器或NHibernate Profiler。
关于SP的速度要快得多,请阅读this和this。此外,ORM(至少NHibernate)为您提供了非常简单的方法来使用SP。