** 实战 ** ** .Net ** ** 数据访问层 ** ** **
l 特别说明
本篇实战共分23段,非作者有意如此,乃受CSDN发表文章之64K所限。
虽然有几段根本没有达到64K,但估计是HTML Source超过了这个范
围,所以也不得不单独分段(大都是源代码),请大家谅解。
如果有朋友需要完整文档,请发邮件给我:
mailto:[email protected]
l ** 引言 ** ** **
这次的讨论是上一部分“ 剖析 ** .Net ** ** 下的数据访问层技术 ** ”的一个续,但也可独立成章,为突出主题,作者就特意换了一个标题。
关于上次的内容,大家可以参考如下链接:
_ http://www.csdn.net/Develop/read_article.asp?id=26689 _ ( 一共六篇, id 从 26689 到 26694 。也可以通过 dev.csdn.net -> Windows/.NET 进行访问 )
在以下论述中,为统一起见,作者暂时将数据访问层简称为 ** DAL ** ( ** Data Access Layer ** )。而在“我的方案”中,作者会介绍另一个“ DAL ”( Data Access Logic ),为避免歧义,所有 Data Access Logic 将保留全名,不再采用简称。
需要特别说明的是,以下列出的代码全部基于 .NET Framework 1.2 实现,您也可以在 .NET Framework 1.1 上进行模拟,但某些 ADO.NET 2.0 中的更新内容可能无法使用,如: ObjectSpaces , DbDataReader 等。
您可以通过两种方法使用 .NET Framework 1.2 :
(1) 安装 Whidbey ( Beta )或者 Visual Studio .NET 2005 ( Preview ),这是最简单的方法;
(2) 安装 .NET Framework 1.2 Runtime ( Redistributables ),使用 Visual Studio .NET 2003 (不支持 Vistual Studio .NET 2002 )进行开发。这种方式需要注意两点:
i. 对于 Windows Application ,在 App.config 中进行如下设置:
1<configuration>
2<startup>
3<supportedruntime version=" v1.2.30703 "></supportedruntime>
4</startup>
5</configuration>
对于 Web Application ,不需要进行什么设置,在安装完 .NET Framework 1.2 Runtime 后已经自动添加了对 IIS 的支持;
ii. 虽然可以通过 Visual Studio .NET 2003 编译支持 .NET Framework 1.2 的项目,但是调试功能将不起任何作用(哪位朋友知道如何解决这个问题?)!
另外, .NET Framework 1.2 Runtime 也可以通过安装 Microsoft Yukon ( Beta )自动得到。
Ok ,言归正传,以下部分就是我的方案。
l ** 我的方案 ** ** **
上次的讨论主要集中在现有的技术,同时,也对不同技术在实现 DAL 时的差异做了一些分析,综合下来,无非就是这么几种:
(1) ADO.NET
ADO.NET 是当前阶段使用 .NET 进行 DAL 开发的基本方式,这里的 DAL ,也包括了对 ADO.NET 进行封装后提供更简单调用的各类实现,经典例子如: Duwamish , PetShop 等;
(2) O/R Mapping
由于 .NET Framework 1.2/2.0 还未正式 Release ,包含其中的 ObjectSpaces 技术暂时还未能成为在 .NET 下进行 DAL 开发的首选武器,但是,随着各类 ORM Framework 的逐渐成熟以及一些开发厂商的不断努力,这方面正呈现出茁壮成长的势头;
(3) X/Y Mapping
这里的 X/Y Mapping 是指除了上述 O/R Mapping 之外的其它各类 Data Mapping ,如: XML to Relation Mapping , Relation to XML Mapping , Object to XML Mapping 等,这部分内容不是本文重点,作者将另辟专文讨论;
(4) Distributed Process
严格来说,这个并不是真正意义上的 DAL 技术,充其量只算锦上添花。不过,正因为考虑到 DAL 分布式处理的可能性,作者在自己的方案中将其单独归类,并不将其作为 DAL 的主要特性去实现。这方面的技术大家早已耳熟能详: .NET Remoting , WebServices 。
以下,作者将给出一个自己的解决方案,通过实例,和大家一起探讨一下 .NET 下的 DAL 实现技术。
u ** 综合现有的技术 ** ** **
** 1. ** ** 概述 ** ** **
说是解决方案,其实也就是一个 “大杂烩” ,作者希望通过综合现有的 .NET DAL 技术来达到 ** Generic ** 目的,免去了为不同项目反复编写 DAL 的无尽痛苦 L ,虽然绝对不是银弹,总也想为广大(我也是“受害者”之一 J ) DAL 工程师们带来一点点的改善。除此之外, ** Ease of Use ** 也是这个解决方案必须考虑的另一难题!
为简单起见,以下将作者的解决方案简称为: ** DAF ** ( ** Data Access Facade ** ) ** Solution ** 。
总的来说,就作者个人观点, DAL Generic 有两方面需要我们重点考虑:
(1) ** 接口一致性 ** :这个大部分 Solution 都能满足,但有一点比较讨厌,就是 ** Data Entity ** 的设计!这是一个很难 Generic 的家伙,经常让人顾此失彼 L
** (2) ** ** 存储无关性 ** : Database 方面可以通过 Provider Factory 实现,但 XML 与 Database 的混合存储模式就比较麻烦了!随着 XML 在应用中的逐渐普及( Yukon 甚至将其集成到了 Database Table Column 中), DAL 将不可避免地与它产生交互 L (当然了,还有种变相的做法也可以解决这个问题:将所有 XML 问题统统隔离在 DAL 之外 J )