一、 O/R Mapping框架
1、 O/R Mapping介绍
在我们开发应该程序的时候,总是要跟很多数据打交道,为这些处理主要是围绕这数据的查询于存储。对于要处理高可靠性和一直性数据的时候我们一般采用数据库,例如:SQL Server。我们都知道SQL Server等数据库都是建立在关系模型之上的,而现在我们大部分所使用的语言(C#和VB.NET,Java)都是面向对象的,这就产出了矛盾,在O/R Mapping框架出现前我们处理数据存储都不是用完全面向对象的方法,而将就数据库用半过程型(写一个保存数据的方法或是通过一个控制类来组合对象)的方法来存取数据。就拿SQL Server数据库带的例子NorthWind来说明,其中有Customer、Order、OrderDetail表,在.net下我们会用DataSet来存取他们,并加入约束和关系,从面向对象方法来做应该是这样的Customer对于多个Order,那么Order应该是Customer对象的一个属性,这个属性就是Order对象,而不只是Order表中储存的一个CustomerID,如果用DataSet来做就需要编写Sql语句或者是存储过程来查询实现,这就需要额外的控制类来完成,实际上ObjectSpace就是用来完成这一过程的框架。
在以往很多失败的项目其原因就是在数据访问上,如果我们有几百个对象,有几百张表可以想像这样的系统数据访问是多么庞大,ObjectSpace的出现可以说是一个革命,我们只需要使用映射工具生成映射稳定,然后剩下的工作就由ObjectSpace来完成,而且数据库设计的地位不再象原来那么神圣了,基本上我们做完分析后,数据库的表就可以根据分析出来的实体对象得到。
在以往很多失败的项目其原因就是在数据访问上,如果我们有几百个对象,有几百张表可以想像这样的系统数据访问是多么庞大,ObjectSpace的出现可以说是一个革命,我们只需要使用映射工具生成映射稳定,然后剩下的工作就由ObjectSpace来完成,而且数据库设计的地位不再象原来那么神圣了,基本上我们做完分析后,数据库的表就可以根据分析出来的实体对象得到。
2、
O/R Mapping
理论
O/R Mapping
就是
Object-Relational Mapping
(对象-关系映射),另外还有个缩写是
ORM
的
Object Role Modeling
(对象角色建模)这个和我们的
ObjectSpace
没有什么关系。
正如前面所说,
![](https://i-blog.csdnimg.cn/blog_migrate/50d948a9d531e3776c840ec853d72dbe.jpeg)
图 1 不同数据模型的比较 (本图片来源于微软网站的 Getting Started with ObjectSpaces )
对象模型理论经过几年的发展已经趋于成熟,而且其优势也不断体现。面向对象建模和编程很接近我们的现实生活,而且其优势还在于软件开发过程中适应不断的需求变化。在面向对象编程的时候很显然我们建立的对象是放在计算机内存之中,如果关闭计算机那么我们的对象就不存在了,对象的永久性(也就是长久保存对象)是我们一直的期望,在
O/R Mapping
出现前我们设计程序不得不花费大量的精力和时间构建我们的
Data Access Layer (DAL
数据存取层
)
,如果项目规模比较大的时候可想而知这个
DAL
层的复杂程度,例如微软的
Duwamish 7.0
中就在这上面用了很多
DataSet
和
DataTable
来构建,相当烦琐(当儿也是
DAL
经典的解决方案)。
现在很多对象模型的数据库已经出现,但其还很不成熟,在现阶段我们不得不继续使用关系数据库来保存我们的信息,
O/R Mapping
让我们以简单快捷地完成对象到关系的转换,使我们内存中的对象在关系数据库中“永恒”。
我估计很有可能当对象数据库技术成熟的时候我们的 O/R Mapping 就将消失, ObjectSpace 等等这方面的东西都只是这一时期的过渡产品。
我估计很有可能当对象数据库技术成熟的时候我们的 O/R Mapping 就将消失, ObjectSpace 等等这方面的东西都只是这一时期的过渡产品。
3.
O/R Mapping的优劣
在前不久一个国外的技术论坛对
O/R Mapping
进行激励争论,有人把这个东西贬的一文不值,有人有认为这是一场革命。我们用
ObjectSpace
来比较下
O/R Mapping
的优劣:
下面是 ADO.NET 和 ObjectSpaces 的一个比较
下面是 ADO.NET 和 ObjectSpaces 的一个比较
技术
|
特点
|
什么时候需要使用
|
DataSet and DataReaders in ADO.NET.
|
|
|
ObjectSpaces
|
|
|
很明显那些贬
O/R Mapping
的人主要抓住的就是它的性能,可以想像我们保存的对象集合
(Collection)
肯定要比
DataTable
耗费内存,和处理更多运算。有人做个测试(
CSDN
上的一个帖子):有
7000
多条记录的数据表中
,GetObjects
需要
20
多秒,而
Find
只要
2
秒,使用
SqlDataAdapter.Fill
方法则不到
1
秒。我个人做过粗略的测试大概
2000
条记录,用
DataSet
和
ObjectSpace
在界面上几乎感觉不出什么差别。
我个人的观点是:在现阶段赞同
O/R Mapping
,认为这会大幅度提高我们的软件开发效率,而且现在计算机的性能一般都还可以,所以几个毫秒的差别不会给使用造成很大的问题。而且对象数据库是我们的目标,
O/R Mapping
也许只是过渡性的东西,说不定再过几十年看历史书也找不到这个概念,我们不应把全部希望放在这个东西上,它毕竟只是一个辅助性的框架,当然也没有必要使劲贬低它,只要它能带给我们好处我认为它就是好的。
2、
一些
O/R Mapping
框架
这个框架的概念最早出现于
Java
平台,现在
Java
平台下用好几种这类工具例如:
Hibernate
、
JDO
等等都是开源免费的,这我就不叙述
Java
下的工具,我们主要说说
.NET
下的。
NHibernate
(免费)
NHibernate
是模拟
java hibernate
的
.net
实现,当前在
.net
社区中,对其寄于厚望。这个东西最近推出了新版本,不过我从来没有用过。
XPO
(
eXpress Persistent Objects
)
这个是
Developer Express Inc.公司的产品,这个公司有个很出名的控件XtraGrid。XPO运用了对象缓存池技术其在读写数据库速度上有了很大提高,据说和DataSet不相上下了。不过XPO最大的缺点就是映射文档,他不像ObjectSpace用XML文档来保存映射信息,XPO是用在类或者方法前面加特性(Attribute)来完成映射,如果数据库的很多,实际上用这东西不比写SQL语句好多少,不像ObjectSpace的映射文档点点鼠标就可以完成了。
WilsonORMapper
这个是一个叫
Wilson
的外国
MVP
写的,应该是属于比较早的
O/R Mapping
工具,这东西注册需要
50
美元。从易用性和其他方面这个工具都还是不错的,而且支持很多种数据库,不像
ObjectSpace
只支持
SQL Server
。但这个工具不能夸数据库的表做映射,期望以后的版本会有所改进。
目前
.NET
主要映射框架(工具)就是这几个了,其他的我都还不了解。
注:其中一些资料来源于 CSDN 论坛上对 O/R Mapping 讨论的帖子。