ASP.NET中NHibernate的非常好的实践
1.介绍
为什么使用ORM?
作者提示:下面是我在业余时间从一本书上摘抄的摘录。
当下一个十年,我们不会看到银弹。无论在技术上还是管理技巧上,都没有单一的发展。无论在生产力、可靠性还是简易性方面,在十年中,这些技术和技巧都会取得很大的数量级的进步。
在1986的No Silver Bullet这句圣言现在被Frederick Brooks'放入他的著作中,Brook’s的说一直都是对的,直到大概10年后,即1997,在软件世界中喻为银弹的NeXT's Enterprise Object Framework,世界靠前个对象-关系影射(ORM)框架发布了.虽然不成熟并经常被认为是触犯了软件教条的异教徒,但是仍被很多人普遍接受的ORM技术。事实上,当它被正确使用,它就是软件开发的银弹.随着NHibernate的成熟,ORM中的银弹已经正式地被介绍给.net世界。
ORM技术最经常的反对者,大体上来说,是使用微软技术的开发者。(因为在过去得十多年里,我一直在研究这个领域,我很高兴能先提高我们)。“如果微软没有开发它,那么就等微软找到正确地方法来开发它”这好像是一条没有成文的规则。在即将到来得C# 3.0中,微软打算使用"LINQ to Entities"来完成它。(是的,正式抛弃使用"LINQ to Entities")开发者可能继续等待这种技术,或者,有另外一个选择,开始迅速意识到ORM的好处。公平地说,虽然微软没有能开发出来的东西很少,但是自从.NET. Circa 2004面世后,这些没有开发出来东西一直在增多,微软人员(像是母亲)没能创建出来的开放资源工具终于开始达到成熟,这种成熟让人高兴,每一个致力于.NET的人员都要仔细考虑这种成熟。
这些技术的其它反对者暗示说ORM扼杀了应用程序性能,仅仅在最初的发展阶段给开发带来了巨大的进步。而且,这种争论还在继续,当性能和可维护性的问题开始带来更加值得注意的影响时,使用ORM在项目后期会给项目成功带来严重的损害。三个明显反驳浮现脑海,在回应这些论点。
首先,作为开发者,使用一个能够支持ORM的框架,例如:NHibernate会提高你的工作性能.你可以少于90%的时间(对,我说的就是少于90%的时间)来开发数据访问代码,然后可以将品质时间花在提高领域模型以及调整性能――假设有必要的话。而且,在综合利用一个简单的压型工具需要很长的时间才能暗示5%的代码,5%的代码会导致95%的性能瓶颈。当在数据访问层就是瓶颈的情况中,为了获得巨大的改善,通常可以作一些简单的调整。顺便提及一声,不用ORM也不会有多少不同。(一定要阅读Peter Weissbrod写的《introductory article to profiling NHibernate applications》)。当ORM构架成为瓶颈并且不能靠调整来改进的情况是很少的,如果适当地分离了数据访问层,就非常容易绕过ORM。
第二,明确地说,在数据载入行为的所有方面,NHibernate不可思议地控制了它们。对于开发人员的生产力,应用程序灵活性以及应用程序稳定性来说,这一控制给它们产生了有利的影响。当然高速缓冲存储器是可以使用,同时在非ORM解决方案中高速缓冲存储器也是可以使用的。其它out-of-the-box特点,包括lazy loading,对继承的支持,不可变类声明,加载数据到只读属性,支持泛型、存储过程等待。这些强大的特性都在在实际项目中被验证是可行的,另外这些都能够在减少自定义数据访问层的改错和调试时间。(而且,如果你真正地觉得要进入代码,仅仅用NHibernate的开放资源项目就可以了)。
最后,我想说:那些感觉ORM(例如:NHibernate)在项目后期的维护方面有问题,因而正在使用代码结构体,这样做,只会阻碍任何数据访问层的维护。刚才我说NHibernate是一个银弹,并不是意味着它把正确的应用程序设计的要求去除了。明智地从构架方面来考虑,对于输入一个.NET 应用程序到数据库,可能NHibernate是最可以提供最大维护的解决方案。
不必说,NHibernate和其它ORM工具一样,减轻了成千上万的代码行和储存程序的维护,因而允许开发者将更多的注意力放在项目的核心上:及时领域模型和商业逻辑。即使你使用一个工具,例如:CodeSmith 或者 LLBLGen Pro,自动地生成你的ADO.NET数据访问层,在你的关系模型中退耦到你的领域模型时,NHibernate会提供足够的灵活性。你的数据库应该是一个“执行细节”,这个“执行细节”被定义来支持你领域模型,而不是用其他方法。这篇文章的剩余部分集中描述了使用已定制的设计模式和“从领域学到的知识”,以此来整合NHibernate到ASP.NET的最优方法。
0
相关文章
- 微软365环境被利用在商业电子邮件攻击中李雪薇 · 2025-03-18
- 微软CEO称AI系统存在"过度建设",AGI不过是"无意义的基准测试游戏"姜惠田 · 2025-02-21
- 搭载英特尔酷睿处理器,微软推出全新Windows 11 AI+ PC,Surface商用版姜惠田 · 2025-02-18
- 微软起诉海外威胁行为组织滥用OpenAI服务李雪薇 · 2025-01-16
- 网络安全警报!微软修复161个漏洞,警惕零日攻击李雪薇 · 2025-01-15
- 微软代码埋雷,Linux内核6.13险翻车,英特尔和AMD紧急救场陶然 · 2025-01-14
- 重启解决99%%故障?微软全球瘫痪11小时,无奈手动重启服务器救急!卢敏 · 2024-11-26
- 微软应用商店引入腾讯应用宝专区,拓展 Windows 应用生态姜惠田 · 2024-11-13
- 微软翻车:Windows Server 2022自动升级至2025,运维天塌了!陶然 · 2024-11-08
- 微软在安全攻势中削减云网络攻击面李雪薇 · 2024-09-25