震撼与灵巧——移植到.NET对象关系映射
[IT168 技术评论]在.NET世界里,对象关系映射已经变成了常见的活动领域。对于一些开发者来说,ADO.NET已经足够处理他们的数据需求了。但对于另外一些开发者而言,他们更青睐于使用完整的面向对象技术,这个时候就该ORM闪亮登场了。
ORM之所以受到广泛关注,是因为他们有助于帮助开发者组织代码,使他们的对象可以更好地集成到新的应用程序中。过去的几年中已经出现了很多ORM工具,但问题同样随之而来——如什么时候将对象最终保存到数据库中、消耗的时间过长等。
微软曾企图通过ObjectSpaces ORM软件来切入这个领域,但该公司很快就停止了OjbectSpaces的开发。就像Longhorn操作系统一样(其客户端产品已经发布,并更名为Vista,而Longhorn Server还在开发中),为了发布该产品,微软放弃了很多特性。这就给一些开源社区和第三方数据访问软件供应商留下了市场,由他们来填补这一空白。
但这个空白是短暂的——微软的很多有影响力的开发领袖们正在向Orcas——Visual Studio、C#语言和VB语言的下一个版本——中添加LINQ技术。LINQ(Language Integrated Query,语言集成查询)是对Microsoft .NET Framework的一项改进,目的在于简化那些负责构建数据查询的开发者的工作。
ORM近在眼前
自从微软在2004年提出ObjectSpaces以来,涌现了很多ORM软件。一个最有影响力的解决方案就是从一个Java开源项目Hibernate发展来的 NHibernate。它为面向对象开发提供了持久的类。NHibernate的开发者尝试为其提供与Hibernate类似的API,使其具有通用性。
随着NHibernate(由Hibernate.org支持)的出现,很多公司都提出了面向数据的开发者解决方案,这些公司包括Alachisoft、EntitySpaces.NET、Progress、RogueWave、SoftwareTree、Wilson ORMapper、X-tensive等等。
上个月,Hibernate.org发布了NHibernate
“我不敢说NHibernate易于上手。实际上,我认为恰恰相反,”NHibernate的首席开发者Sergey Koshcheyev说,“因为NHibernate基于很多现有的与会话管理相关的概念和原则,这些都很难上手。
“但从长远来看,花些时间学习这些可以鼓励我们做正确的事情。”Koshcheyev说。
还有一样东西可以使得NHibernate在很长一段时间内都能有用,那就是钩子(hook),使用钩子可以为NHibernate添加功能插件。“当然,如果你听听用户的意见,就知道现有的钩子根本就不够用,有太多太多的东西需要添加到新版本中,”Koshcheyev说,“这些钩子包括如何在NHibernate函数中回滚SQL。”
谈谈代码生成
代码生成从来都是备受争议的。在ORM领域,很多人认为这可以快速地创建解决方案,但管理其生成的代码很消耗时间。
另外一款ORM工具——Genome——不会生成任何需要维护的代码,因此这个过程还是可以忍受的。
TechTalk的股东Christian Hassa创建了Genome ORM,他说:“当需要在项目中使用ORM工具时,肯定会带来一些开销,比如你需要熟悉它的API,并且克服或多或少的学习任务。当你后来沉醉于ORM所带来的利益时,你就会觉得这些付出还是值得的。
“在一开始很容易被ORM的神话所迷惑,因为它看似可以生成大量的代码,很快实现一个功能完整的解决方案,”Hassa说,“在第一次交活时,它看起来的确节省了时间。但之后,你就会慢慢发现这些生成的代码已经成了你的代码资产的一部分,这时你才意识到任何自动生成的代码也是需要维护的——根本别想重新生成它们。
“一开始的快速取胜并不代表着今后维护解决方案时的真正开销,”她说,“给人一切都是‘自动化’的假象的解决方案很快就会土崩瓦解,就在你需要处理其中的琐碎问题的时候。”
回归SQL
很多专家都承认,好的架构比新型的、奇特的架构储备更重要。这就像对于一个木匠来说,给他一个好的物料管理器并不能让他成为一个好木匠。如果这个木匠本身具备在盖房子的过程中管理物料的能力,那他就能工作得很顺手。否则这种激动人心的工具也只能带来混乱。
Koshcheyev说,“要知道ORM并不是银弹。当碰壁的时候,不要害怕回到SQL。任何ORM工具都有其缺点和限制,这是任何软件的本质。”
那么我们应该对ORM抱什么样的期望呢?它的功能应该在需要的时候就出现,不需要的时候就消失。
“从架构师的角度看,我不希望ORM在数据基础和对象模型中留下太深的烙印。”Ben Day法则,Benjamin Day Consulting。
“当对象关系映射不能工作时,我希望不用修改整个设计。有的时候用ADO.NET或存储过程可能更容易一些,”Day说,“当我需要的时候,我就是用ORM来协助我;但如果不需要,我决不碰它。我认为NHibernate在这方面做得很好。”
ORM的一个挑战就是缺乏标准,但这些会被微软的LINQ所带来的事实标准所解决,希望所有的ORM都能实现一组通用的方法来公开其查询功能。因此LINQ可能并不会威胁到新兴的ORM工具市场。
TechTalk的 Hassa说:“LINQ已成事实,问题只在于它什么时候发布,是2007年底,还是2008年?ORM领域将会出现向LINQ进行的大规模迁徙。然而只要LINQ发布了,这些工作就能保护你的投资。”
快速参考——一些面向数据的开发者解决方案
http://www.theserverside.net/news/thread.tss?thread_id=44161 What's in an ORM?
http://www.theserverside.net/news/thread.tss?thread_id=29914 Which ORM is the best?
http://www.theserverside.net/tt/articles/showarticle.tss?id=NHibernate Introducing NHibernate
http://www.theserverside.net/news/thread.tss?thread_id=39225 Periwal discusses a Pet Shop ORM
http://www.theserverside.net/news/thread.tss?thread_id=42294 EntitySpaces 1.5 Beta released
http://www.theserverside.net/news/thread.tss?thread_id=44336 Genome 3.1 for .NET
http://www.theserverside.net/news/thread.tss?thread_id=44200 2.0: ORM geared for
http://www.theserverside.net/news/thread.tss?thread_id=44185 LINQ/C# Learning Guide
http://www.theserverside.net/tt/articles/showarticle.tss?id=ORMGuide ORM Guide
作者简介
George Lawton是加拿大布里斯班的一名技术作家,为Software Magazine、Application Development Trends、IEEE Software和其他技术出版物撰文。
Jack Vaughan是TheServerSide.NET的网站编辑。他是XML/Web ServicesONE大会的副主席。他拥有12年分布式对象技术、XML和应用程序服务器方面的软件开发经验。在加盟TheServerSide.NET之前,Vaughan是Application Development Trends的一名普通编辑。