[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说,“在第一次交活时,它看起来的确节省了时间。但之后,你就会慢慢发现这些生成的代码已经成了你的代码资产的一部分,这时你才意识到任何自动生成的代码也是需要维护的——根本别想重新生成它们。
“一开始的快速取胜并不代表着今后维护解决方案时的真正开销,”她说,“给人一切都是‘自动化’的假象的解决方案很快就会土崩瓦解,就在你需要处理其中的琐碎问题的时候。”