`
izuoyan
  • 浏览: 8933043 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

O/R Mapping有感 (转载)

阅读更多
一、O/R Mapping简介
目前大多数项目的实体对象的数据是存储在关系型数据库中的,开发时要求开发人员对SQL语句、语法、规则等必须很熟,在很多情况下,开发人员需要手写SQL语句,同时还得考虑事务处理、逻辑分析等等问题,导致整个项目的SQL语句到处都是,这对程序的可读性、可维护性都带来了阻碍。同时,当新项目加入时,很多地方又不得不重新coding一些大而复杂的相关代码,这样又何来可重用之谈呢?程序调试起来又麻烦了,既要调试程序,又得调试SQL语句。
为解决上述问题,各种O/R Mapping(对象/关系映射)系统应运而生,通过将面向对象模型映射到关系模型,使得我们在编程中直接使用对象模型,就能够将实体对象的数据自动存入关系数据库中。
这样,你的应用程序和数据库不再紧密耦合,绝大多数情况下你也不需要一遍又一遍重写烦人的SQL语句了(可能有点夸张,至少CRUD[Create、Read、Update、Delete]语句不要写了)。而且,如果数据库中表或者字段有所改变的话,则业务逻辑层的代码几乎不要改动,改动的可能仅仅只有实体类和数据表映射的地方,这在以前是难以想象的。


二、为什么要采用O/R Mapping
1)提高学习开发效率,降低开发成本。
使用ORM可以大大降低学习和开发成本。现代技术的发展,使得我们不得不不停地学习。我们不仅要学习面向对象、UML、设计模式等知识,而且还需要学习Sql Server、Oracle、ADO.NET等知识。而在实际的开发中,真正对客户有价值的是其独特的业务功能,而现在的现状是我们花费了大量的时间在编写数据访问,CRUD方法,包括后期的Bug查找,维护等也会花费相当多的时间在数据处理上。这就是说,我们在实际的开发中很多的时间都被浪费在根本不创造价值的非业务事件上了。
在使用ORM之后,我们将不需要再浪费太多的时间在ADO.NET和Sql语句上。ORM框架已经把数据库转变成了我们熟悉的对象,我们将只需要了解面向对象开发就可以实现数据库应用程序的开发。

2)简化代码,减少BUG数量。
通过建立ORM系统,能够大量减少程序开发代码,实现ORM后,开发数据层就比较简单,大大减少了出错机会。

3)提高性能
同时通过Cache的实现,能够对性能进行调优,实现了ORM区隔了实际数据存储和业务层之间的关系,能够对每一层进行单独跟踪,增加了性能优化的可能。

4)隔离数据源,可以很方便的转换数据库
利用ORM可以将业务层与数据存储隔开,开发人员不需要关系实际存储的方式,如果我们需要把SQL Server数据库换成ORACLE数据库,只需要修改配置文件就可,不需要修改程序。



三、O/R Mapping带来的变革
我们已经知道,O/R Mapping框架把数据库和SQL语句都隐藏起来,使得程序员无须关心实体对象在数据库中如何存储,只要按照最普通的方式设计并使用实体对象,O/R Mapping框架会把各种关系处理得妥妥贴贴。O/R Mapping如此的魔力似乎可以让数据库从程序员的视野中消失,乖乖的去Hibernate(冬眠)。

Hibernate认为,O/R Mapping是这样一种操作:它试图将实体对象的状态映射到RDBMS的数据上,以便提供透明的持久化操作。从这个定义可以看出,O/R Mapping与传统意义上的数据库设计的目标大相径庭。关系数据库设计的目标是以最少冗余度完整的保存数据;而O/R Mapping的目标是简便的持久化业务模型中的实体对象,使开发人员得以避免编写数据访问的代码。

我们可以把常见的企业级应用分为两类:OLTP(联机事务处理)和OLAP(联机分析处理)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易等。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,提供各种报表,侧重决策支持,并且提供直观易懂的查询结果。显然,O/R Mapping适用的范畴被严格的限制在OLTP之内。OLAP是完全不必要使用O/R Mapping的。

我们要注意,由于O/R Mapping不仅仅是一种技术手段,它事实上代表着整个应用系统的建模策略:如果采用O/R Mapping机制,意味着系统建模将从对象模型入手,数据库结构只是对象模型的附属产品,并且将随对象模型的改变而改变。



四、微软的O/R Mapping
ObjectSpaces就是微软创建的ORM系统,是.NET Framework的令人兴奋的特性,原先计划在2005随Whidbey同时推出,遗憾的是,现已被推迟到2006或2007与Longhorn同时推出。
ObjectSpaces提供了你的实体对象和存储在关系型数据库中的关系对象的映射。
ObjectSpaces会处理和数据相关的任何操作,例如查询、更新、插入等等,ObjectSpaces通过3个Schema XML文件来处理实体对象和关系对象的映射。
(1) Object Schema Document(OSD)。描述了所有实体类的定义。包括类属性、类间关系等。
(2) Relation Schema Document(RSD)。描述了关系数据库中所有表的信息。包括字段和关系等。
(3) Mapping Schema Document(MSD)。描述了OSD和RSD之间的映射。


五、NHibernate

什么是NHibernate?我在他们网站上摘录一段:NHibernate is a .NET based object persistence library for relational databases. NHibernate is a port of the excellent Java Hibernate relational persistence tool.。
NHibernate handles persisting your .NET objects to and from an underlying relational database. Rather than you having to write SQL to get your objects in and out of the database, NHibernate takes care of this for you. Your code only need be concerned with your objects, NHibernate generates the SQL and makes sure that things end up in the correct tables and columns。

在微软的ORM系统没有就绪的情况下,NHibernate绝对是个好的选择。强烈建议去了解NHibernate,请看:http://nhibernate.sourceforge.net/


六、Grove Develop Component Kit
Grove Develop Component Kit包括Grove Develop Component和Grove Tool Kit两部分。Grove Develop Component是一套基于.NET的可重用组件,支持多种不同的数据库项目,提供标准的二层、三层及多层等开发框架。Grove Tool Kit是针对Grove Develop Component提供的一套.NET Develop Environment的外接程序,能够帮助生成依赖于Grove组件的可重用代码,包括数据库映射的实体类、XML实体描述等。Grove Tool Kit最大的特点在于可以通过工具在多表之间建立关联,并自动生成多表查询的映射实体或XML映射描述。当前Grove支持多表关系查询,包括表间LEFT JOIN、 RIGHT JOIN、FULL JOIN及默认的INNER JOIN,支持子查询IN。

如要了解Grove,请看http://grove.91link.com

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics