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

原创 2004年04月12日 13:36:00

其它<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

      结束ADO.NET剖析前,不得不提提DataReaderDataSet间的兄弟

之争。

      就作者所看过的资料,几乎所有的都建议实际情况具体分析,剩下

很少很少的则全凭个人习惯决定。

      在学习ADO.NET时,作者也是抱着这样的想法,并反复牢记资料

上总结的那些条款(就像当年学习GOF 23条时那样,几乎可以倒背如

流了J),想到终有一日也可在ADO.NET下大展神威了。

 

      可惜现实不随人愿,连续做了几个项目,无论规模大小,竟然全部

采用了DataSet解决方案!

      此时,再回头看看学习ADO.NET时打开最为频繁的PetShop项目,

两相一比较,这才看出些许端倪。

 

      简单的说,PetShop采用了如下这种“曲线救国”的方式来实现数据

交换:

 

      DataReader获取数据 => 创建数据实体类 => 根据字段类型填充

据实体类 => 将数据实体添加到列表类中(仅针对返回超过一条数据的

场合)

      (补充:采用数据实体类或者集合类可以比较方便的实现Cache Manament

而普通的DataReader由于其数据读取方式限制,无法满足这种需求)

 

      这个过程与DataAdapter.Fill() 所所产生的效果大同小异,只不过,

Fill() DataAdpater自动创建DataReader去获取数据,之后创建

DataTable(相当于数据实体类),并根据字段类型填充DataTable,当然

,如果可能返回多条记录,DataTable完全可以处理,就没必要去实现列

表操作了。

      可能读者马上产生了疑问:既然如此,PetShop中为何还需要数据实

体类呢?

      这其中还是有一些差别的。

      首先,数据实体类是轻量级的structure,一般仅包含数据字段,没有

什么操作方法,这比DataTable或者DataRow还是有一些性能上的优势

(在数据量不大时可以忽略不计);另一方面,数据实体类的操作相对

简单,不需要开发人员具备任何ADO.NET知识(其实就DataTable

说,这也不算什么问题),点点属性就可以了。

      不过,根据作者的实践来看,这两方面似乎还不足以使人转而使用

DataReader方案,理由列举如下:

     

(1)    对于数据量较大的场合,可以采用分批读取的方式,这有点类似DataGrid的数据分页效果;

 

(2)    对于简单的数据,实体类还能应付,一旦涉及关联数据,就只能另外撰写方法了。而所有这些,在DataSet中是非常容易处理的(对于企业级应用,大部分情况都需要处理比较复杂的数据);

 

(3)    DataTable“天生”就支持数据集合操作,这样的特性比“集合+实体”的混合模式(PetShop)更容易控制,也更自然;

 

(4)    实体类在声明时需要确定所有数据类型,当进行数据填充时,就需要DataReader再次关注实体所对应的数据类型,不能有丝毫差错!在这方面,DataTable就显得非常方便,操作时只需要一次类型关注即可;

 

(5)    DataSet解决方案可以非常方便的支持序列化操作(如:RemotingWebServices),同时,与XML的关系更是亲密无比,这对于和其它系统的交互来说也是至关重要的。

 

分析过一些技术和方案,相信读者朋友已有一些体会。值此收官之际,如果非要在这里提供一个“综上所述”,那作者的建议就非常明确:

 

在企业级应用开发中,尽可能的采用DataSetDataTable / DataView+ Cache Management解决方案!

 

其它开发中,只在如下4种情况才考虑使用DataReader(就作者经验来说,大部分使用DataReader都属第种情况):

 

(1)    对资源要求比较苛刻的场合,这里的资源主要指内存和数据库连接;

 

(2)    希望在读取数据库返回结果集时作自定义处理,例如:在读取一条记录后立刻终止处理,或者在读取时作计算操作。

(提示:这种情况类似于XML中的SAXSimple API for XML)技术,无需一次性读入所有XML数据即可进行操作;相反的,DOMDocument Object Model)则要求必须装载所有XML数据后才能开始操作(MSXML4.0已开始允许只读取XML文档部分数据即可开始操作,这是后话)!

 

(3)       只希望得到返回记录数或者返回记录的部分字段,如:

string GetNameByID(int nID) //根据员工ID返回员工姓名,这里只需要

// 读取姓名字段;

(提示:这种情况一般可以通过执行特定的查询或存储过程直接解决)

 

(4)    出于某些方面的考虑(例如:n-Tier系统中严格区分各Layer间的职责),无法(或者禁止)通过数据库本身进行查询过滤,这时就只有使用DataReader在读取时进行过滤操作!

(提示:虽然DataView也能达到这种目的,但它的过滤前提是必须读取到所有返回数据,所以性能上不如DataReader!)

 

 

作者简介:

本文作者张雪峰 毕博全球开发中心 的高级开发工程师。他目前在中国上海 毕博全球开发中心 Core/EAI 部门工作,从事 .NET 技术的研究以及相关项目的开发。可以通过 xuefeng.zhang@bearingpoint.com 与他联系。

 

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

自从 .NET 真正走入开发人员那天起,“效率”两个字就一直成为众多程序员津津乐道的话题。无论是从开发模式(Cross Language)、系统框架(.NET Framework),还是各种使用方便的...
  • mlks_2008
  • mlks_2008
  • 2007年11月06日 23:56
  • 859

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

 u     其它Ø        ASTA经常在Delphi下进行网络数据库应用开发或者曾经使用过Borland Midas技术的朋友,对ASTA应该不会陌生。如果说基于ADO.NET或O/R Ma...
  • zhangxuefeng
  • zhangxuefeng
  • 2004年05月09日 11:06
  • 2385

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

自从 .NET 真正走入开发人员那天起,“效率”两个字就一直成为众多程序员津津乐道的话题。无论是从开发模式(Cross Language)、系统框架(.NET Framework),还是各种使用方便的...
  • jianzi1943
  • jianzi1943
  • 2006年12月21日 09:43
  • 1141

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

 u     O/R MappingO/R Mapping的全称是:Object Relational Mapping,主要目的是在传统RDBMS与OO Language之间建映射关系,从而使开发人员...
  • zhangxuefeng
  • zhangxuefeng
  • 2004年04月12日 13:02
  • 1470

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

 Ø        Borland ECO素以提供“多快好省”组件著称的Borland公司在微软发布ObjectSpaces之前率先推出了一套新的开发框架:ECO(Enterprise Core Ob...
  • zhangxuefeng
  • zhangxuefeng
  • 2004年04月12日 13:36
  • 1029

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

 l       引言自从 .NET 真正走入开发人员那天起,“效率”两个字就一直成为众多程序员津津乐道的话题。无论是从开发模式(Cross Language)、系统框架(.NET Framework...
  • zhangxuefeng
  • zhangxuefeng
  • 2004年04月12日 13:02
  • 1594

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

 Ø        Microsoft ObjectSpaces这是一个在几年前就让众多.NET guy伸长脖子激动不已的技术。就作者来说,那个时候,只要一提起这个话题,一般都是在J2EE guy的嘲...
  • zhangxuefeng
  • zhangxuefeng
  • 2004年04月12日 13:02
  • 969

.net中的数据访问层的封装

当年.net项目中自己封装的数据访问层,个人感觉使用非常方便
  • kevin_xf
  • kevin_xf
  • 2016年12月05日 15:53
  • 812

Asp.net mvc 数据访问层

理解了一些概念,本节开始尝试创建属于自己的数据访问层,说道数据访问层那必须有数据库咯(数据集合也算,此处以数据库为例),没有数据库就没有数据访问层。 1、先创建属于自己的数据库       打开已...
  • u013108485
  • u013108485
  • 2016年04月14日 16:19
  • 4945

.NET 数据访问架构指南(转)

 Alex Mackman, Chris Brooks, Steve Busby, 和 Ed Jezierski 微软公司 2001年10月 概述:本文提供了在多层.NET应用程序中实施基于ADO.N...
  • ycl111
  • ycl111
  • 2004年12月06日 13:07
  • 1198
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:剖析 .Net 下的数据访问层技术(二)
举报原因:
原因补充:

(最多只允许输入30个字)