ObjectSpace 基础

一、             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 来完成,而且数据库设计的地位不再象原来那么神圣了,基本上我们做完分析后,数据库的表就可以根据分析出来的实体对象得到。
2、   O/R Mapping 理论
O/R Mapping 就是 Object-Relational Mapping (对象-关系映射),另外还有个缩写是 ORM Object Role Modeling (对象角色建模)这个和我们的 ObjectSpace 没有什么关系。
正如前面所说,
ObjectSpace 基础_第1张图片
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 等等这方面的东西都只是这一时期的过渡产品。
3. O/R Mapping的优劣  
    在前不久一个国外的技术论坛对 O/R Mapping 进行激励争论,有人把这个东西贬的一文不值,有人有认为这是一场革命。我们用 ObjectSpace 来比较下 O/R Mapping 的优劣:
下面是 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 (免费)
http://sourceforge.net/projects/nhibernate
NHibernate 是模拟 java hibernate .net 实现,当前在 .net 社区中,对其寄于厚望。这个东西最近推出了新版本,不过我从来没有用过。
XPO eXpress Persistent Objects
这个是 Developer Express Inc.公司的产品,这个公司有个很出名的控件XtraGridXPO运用了对象缓存池技术其在读写数据库速度上有了很大提高,据说和DataSet不相上下了。不过XPO最大的缺点就是映射文档,他不像ObjectSpaceXML文档来保存映射信息,XPO是用在类或者方法前面加特性(Attribute)来完成映射,如果数据库的很多,实际上用这东西不比写SQL语句好多少,不像ObjectSpace的映射文档点点鼠标就可以完成了。
WilsonORMapper
http://www.WilsonDotNet.com
这个是一个叫 Wilson 的外国 MVP 写的,应该是属于比较早的 O/R Mapping 工具,这东西注册需要 50 美元。从易用性和其他方面这个工具都还是不错的,而且支持很多种数据库,不像 ObjectSpace 只支持 SQL Server 。但这个工具不能夸数据库的表做映射,期望以后的版本会有所改进。
目前 .NET 主要映射框架(工具)就是这几个了,其他的我都还不了解。

             注:其中一些资料来源于
CSDN 论坛上对 O/R Mapping 讨论的帖子。

O/R Mapping 就是要解决关系模型和对象模型的矛盾,在 C# 之类完全面向对象的环境中不去处理这一矛盾,把精力大部分投入到对象的分析和设计中。

你可能感兴趣的:(ObjectSpace 基础)