剖析 .Net 下的数据访问层技术(三)

访问|数据

u O/R Mapping

O/R Mapping的全称是:Object Relational Mapping,主要目的是在传统RDBMS与OO Language之间建映射关系,从而使开发人员彻底脱离数据持久这片剪不断理还乱的苦海。

关于O/R Mapping或者近来比较热门的O/X Mapping(大家可以参考“程序员,2004.01,P86”),可能需要专门的文章进行详细论述,本文的目的主要是对现有方案的优缺点进行简单剖析以及提供一些实践中的参考信息。

相比较J2EE平台,.NET下的O/R Mapping可谓没什么历史,至今还尚未有经过考验的成熟的可用方案。但是,随着各大厂商的重视以及开源项目的如火如荼,.NET O/R Mapping的步伐也开始慢慢跟上,使这块本属于J2EE的领地加入了新的竞争对手(会不会使更多的开发人员投入.NET阵营?J),也让众多疲于在SQL Clause或ADO.NET中来回奔命的DAL开发人员看到了“光明之路”。

接下来,就让我们一起看看在这片比ADO.NET更广阔的土地上有些什么值得探讨的Solution。

Ø Open Source

开源方面一直与.NET保持一定距离,O/R Mapping更是寥寥无几,但就作者的下载试用和源码分析来看,个人以为如下的两个解决方案还是有一定参考价值的:OPF,OJB。

有关这两个开源项目的简介,大家可以参考“程序员,2004.01,P13”。

OPF的全称是:Object Persistent Framework。

OJB的全称是:ObJect Relational Bridge。

在实现手法上,这两个方案的思路完全不同,具有各自的代表性。

OPF走的路线有点类似于Typed DataSet或Borland ECO(请参考下面的介绍),实现比较简单,提供更多的源码级控制;而OJB的实现则类似于Microsoft ObjectSpaces(请参考下面的介绍),采用了配置文件的方式,相对就比较复杂了。

这两个方案的基本框架如下所示:

OPF:

从图中不难看出:

(1) Persistent类扮演了DataSet的角色,除了常规的对象数据操作外,还可以设定不同对象间的关系(如主从关系,集合关系等,这一点在Borland ECO所生成的代码中也可略见一二),这也是上文所说“提供更多源码级控制”的原因所在;

(2) PersistentSqlDataManager则扮演了DataAdapter的角色,通过预先设置的Commands来执行真正的数据库操作;在实际撰写的employee data manager中,开发人员确实需要提供基本的SQL语句,就像在SqlCommond中设置的那样(Borland ECO则更进一步,以OCL代替了SQL);

(3) ObjectBroker的作用非常重要,它是对象与数据间的桥梁,RegisterPersistent方法建立了这种虚拟(Object)与现实(RDBMS)间的关系;

(4) 在employee business object的声明中,对象属性与数据库字段的对应关系是通过.NET Attribute机制体现的,所以修改起来还是比较方便的,虽然相比配置文件的方式显得不够灵活(请参考OJB的介绍),比如:需要重新编译,开发人员不得不关注数据库字段等。

OJB:

从图中不难看出:

(1) 该方案的实现比较复杂,但用户需要实际撰写的代码变少了(只需要编写employee business object),这其中的关键就在于引入了配置文件;同时,由于配置文件的引入,我们在hello world application中也不需要调用类似OPF解决方案(请参考上文的OPF类图)中的RegisterObject方法,所有这一切(甚至包括数据库连接信息),系统都已了如指掌!

(2) 该方案中,SQL命令通过Criteria类被彻底替代,而QueryFacade则充当了Adapter的功能,通过PersistenceBroker这一真正的Command与数据库进行通信;

(3) 无论是repository.xml配置文件,还是Criteria、QueryFacade类,我们都可以在ObjectSpaces(请参考下面的介绍)中找到类似的实现(难道是巧合?),同时,作者个人以为,这种方式也更符合O/R Mapping的精神,减轻了开发人员的负担!

(4) OJB还有一个非常cool的工具“repositorygen.exe”,可以用来生成repository.xml配置文件(同样的,源码无偿奉上J),这一点,甚至连ObjectSpaces都没能做到(想想那么多字段、属性、关联、映射,简直可以让人发疯J)!

时间: 2024-09-11 13:52:49

剖析 .Net 下的数据访问层技术(三)的相关文章

剖析 .Net 下的数据访问层技术(一)

访问|数据 l 引言 自从 .NET 真正走入开发人员那天起,"效率"两个字就一直成为众多程序员津津乐道的话题.无论是从开发模式(Cross Language).系统框架(.NET Framework),还是各种使用方便的工具(VS.NET),无一不体现出了它的胜人一筹. 同时,在另一方面,.NET 是否可以真正胜任企业级应用(Enterprise Application)开发的重任,却依然争论不断,褒贬不一. 通常来说,对于一个企业级应用,需要考虑的方面很多,如安全.性能.伸缩性.易

剖析 .Net 下的数据访问层技术(六)

访问|数据 u 其它 Ø ASTA 经常在Delphi下进行网络数据库应用开发或者曾经使用过Borland Midas技术的朋友,对ASTA应该不会陌生. 如果说基于ADO.NET或O/R Mapping来实现DAL是少林.武当的正宗心法,那ASTA就有点明教"乾坤大挪移"的味道:将整个DAL中的Data Access几乎完全扔到了另一个地方(和打回原处稍有区别,但也算另一种挪移J)进行处理! 传统的DAL实现大都是这样的: ASTA则另辟蹊径,额外加入了一个"中间层&quo

剖析 .Net 下的数据访问层技术(二)

访问|数据 其它 结束ADO.NET剖析前,不得不提提DataReader与DataSet间的兄弟 之争. 就作者所看过的资料,几乎所有的都建议实际情况具体分析,剩下 很少很少的则全凭个人习惯决定. 在学习ADO.NET时,作者也是抱着这样的想法,并反复牢记资料 上总结的那些条款(就像当年学习GOF 23条时那样,几乎可以倒背如 流了J),想到终有一日也可在ADO.NET下大展神威了. 可惜现实不随人愿,连续做了几个项目,无论规模大小,竟然全部 采用了DataSet解决方案! 此时,再回头看看学

剖析 .Net 下的数据访问层技术(五)

访问|数据 Ø Borland ECO 素以提供"多快好省"组件著称的Borland公司在微软发布ObjectSpaces之前率先推出了一套新的开发框架:ECO(Enterprise Core Object),先不说其技术特点,就凭其与建模工具Together的无缝集成,不得不让人佩服Borland在统一开发过程方面所下的功夫. 根据Borland在ECO介绍中的定义,简单说,ECO就是:模型驱动(MDA-Driven)的.Net数据库应用(Database Application)开

剖析 .Net 下的数据访问层技术(四)

访问|数据 Ø Microsoft ObjectSpaces 这是一个在几年前就让众多.NET guy伸长脖子激动不已的技术.就作者来说,那个时候,只要一提起这个话题,一般都是在J2EE guy的嘲笑声中悻悻而归,恨不能自己也搞个ENB(相对EJB)或者NCMP(相对CMP)什么的. 终于,我们可以在.NET Framework 1.2(可在VS.NET 2004Whidbey或Yukon中找到,目前都是Beta版本)中一睹其"芳容"了J. 首先,让我们看看用ObjectSpaces写

CYQ.Data 轻量数据访问层(三) 构造数据单元(下)

继上一节,回头看这张图片: 回顾上节的话题,怎么设计这样一个数据单元类?才不会有重复的单元表头,又能合理解释出数据与表头的关系? 经过长久的深思后..一个关键的字出来了"ref",引用,是的,用的这就个,如果每个单元格,都包括值和单元表头,而单元表头,都引用同一个的时候,就刚好满足了需求.     于是,我们开始写出这样的类: 先构造出一个存放值的类: /// <summary>     /// 只包函被填充的数据状态和值     /// </summary> 

实战 .Net 数据访问层 - 1

访问|数据 实战 .Net 数据访问层 l 特别说明 本篇实战共分23段,非作者有意如此,乃受CSDN发表文章之64K所限. 虽然有几段根本没有达到64K,但估计是HTML Source超过了这个范 围,所以也不得不单独分段(大都是源代码),请大家谅解. 如果有朋友需要完整文档,请发邮件给我: mailto:xuefeng.zhang@bearingpoint.com l 引言 这次的讨论是上一部分"剖析 .Net 下的数据访问层技术"的一个续,但也可独立成章,为突出主题,作者就特意换

设计.NET应用程序数据访问层五大原则

程序|访问|设计|数据 摘要:大多数使用.NET框架组件工作的开发人员的一个核心工作是实现数据访问功能,他们建立的数据访问层(data access layer)是应用程序的精华部分.本文概述了使用Visual Studio .NET和.NET框架组件建立数据访问层需要考虑的五个想法.这些技巧包括通过使用基类(base class)利用面相对象技术和.NET框架组件基础结构,使类容易继承,在决定显示方法和外部界面前仔细地检验需求. 如果你正在建立以数据为中心(data-centric)的.NET

ASP.NET2.0数据操作之创建数据访问层(1)

asp.net|创建|访问|数据 导言 作为web开发人员,我们的生活围绕着数据操作.我们建立数据库来存储数据,写编码来访问和修改数据,设计网页来采集和汇总数据.本文是研究在ASP.NET 2.0中实现这些常见的数据访问模式之技术的长篇系列教程的第一篇.我们将从创建一个软件框架开始,这个框架的组成部分包括一个使用强类型的DataSet的数据访问层(DAL),一个实施用户定义的业务规则的业务逻辑层(BLL),以及一个由共享页面布局的ASP.NET网页组成的表现层.在打下这个后端的基础工作之后,我们