自适应多种数据库的组件设计(各位久违了)
各位C#版的大虾小虾:
抱歉,我这个版主实在是不称职,前段时间忙得不可开交,没办法经常上来,这里的事务有劳班兄和阿力兄了。
今天上来,看到几个朋友提出了关于数据库设计的一些问题,于是马上跑去写了一篇文章,希望大家能够原谅我。
我实在是对不住大家了......大家蹂躏我吧~~~~
言归正转:
自适应多种数据库的组件设计
.Net类库的数据库处理方式比ASP进步很多,多种数据提供程序提供了不同的数据库连接方式,到.Net Framework1.1版,已经自带了:
SqlClient
OleDb
Oracle
Odbc
四种方式,这四种方式各有优势,对于开发者来说,如果在没有效率损失的前题下设计出适用多种数据提供方式的组件,无疑可以大大提高编码效率和组件重用率。
.Net类库定义了一套数据提供程序设计的规范,上述四个提供程序都满足了该规范,在该规范的约束下,我们完全可以在逻辑层写出与底层实现无关的代码。
该规范,大家可以参考:
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconimplementingnetdataprovider.htm
(注:我使用的是VS.Net2003中文版,其他版本的朋友请自行替换联接)
我在这里为了方便讲述,大致提一下
.Net类库设计了一系列的接口,.Net Framework数据提供程序应该实现这些接口,这些接口包括:
IDbConnection 数据库连接
IDbTransaction 本地事务
IDbCommand 命令
IDataParameter 参数
IDataParameterCollection 参数集合
IDataReader 只读数据流
IDataAdapter 数据适配器
IDbDataAdapter 面向数据库的适配器
对于DataAdapter有一点补充,.Net实现了一个DbDataAdapter类,该类实现了IDataAdapter和IDbDataAdapter,并提供了更丰富的方法,一般来说,完整的Net数据提供程序的DataAdapter都是从该类直接派生,如SqlDataAdpater、OleDbDataAdapter
另外,接口本身不能定义构造器,所以.Net制定了了另一套构造器的规范,请参考:
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconimplementingnetdataprovidercodeconventions.htm
到这里,大家应该明白我想说什么了吧,我们可以写一套组件来动态根据配置创建这些接口,而在逻辑层使用统一的接口,那么就达到了逻辑与底层分离的设计思想。
大家应该都接触过设计模式,听说过工厂模式,实际上在这里正是工厂模式发挥作用的时候,比如我们写一个创建Connection对象的工厂来创建连接对象: