Wildfish框架之数据访问篇

这一篇,其实很上一篇有比较紧密的关联。
我们把数据关联和定义存储在Data层
所以,我们需要从这个Data层里面获取我们想要的信息,然后把数据当作参数传入。
目前,完整测试过的是SQLServer  , 而Oracle/ISeries还没有完整的测试过,所以想接下来把框架公开了。
废话少说,接着讲如何实现这个层。
首先,我们要支持三种数据库,那么我们当然期望能够在今后的使用中,通过内置的配置文件设置,然后只需要依据名字既可获取数据访问器


So ,第一步,我们得有一个框架内部的配置文件,一个嵌入的资源,编译后存入dll中。
我叫它Wildfish.config.xml
结构是
<configuration>
   <DataAccessSection>
 <DataAccessProviders>
       <DataAccessProvider>
         <Name>FishSky</Name> 
         <DataAccessNameSpace>FishSky.DataAccess.Base.MsSql</DataAccessNameSpace>
         <DataSource>(local)</DataSource>
         <Category>FishSky</Category>
         <UserID>sa</UserID>
         <Password>fishsky</Password>
         <TestingCategory>FishSky</TestingCategory>
         <IsTesting>false</IsTesting>
       </DataAccessProvider>


而你所要做的就是,copy一个,然后修改 name namespace datasource category userid password testingcategory istesting的值
name就是到时候用来创建数据访问源的
namespace就是数据访问器所在的命名空间,如果用sqlserver就用MsSql 否则 Oracle ISeries
datasource一般用于标注database server ip/name
category用于表示数据库的名字,Iseries的时候是一个数据库的library list。--istesting=false的时候 
userid password就不用说了
testingcategory 表示istesting=true的时候,指向那个数据库,Iseries的时候是指向一个测试的库列表,only for sqlserver iseries
                 oracle需要在这里重新写测试的database server ip/name
istesting 表示是否属于测试的时候用的dll.


第二步:
由于我们把配置信息存入一个嵌入资源,那么我们就需要dll运行时获取它,
通过一个抽象基类的singleton方法来获取,在AbstractConnectionBuilder.cs文件中。
然后我们定义了一些操作的接口,为每一个数据库类型都做一份,
这里我承认我没做太多的重构,所以存在蛮多可改的地方。
还有,还得说明的就是为什么只作了sqlserver iseries oracle的数据访问器,因为这些sql的参数表达都是类似的,除了oracle需要用:,
当然了,我们还是按照@来写,只是提交的时候替换成: 。只有这样才能做到比较平滑的切换。
数据访问器区分为三种,操作数据 只读访问数据 单行访问数据
具体的实现就是 访问我们在data定义的元信息,然后生成SQL 组合参数,说白了也就是那样。


第三步
如果增加一种数据类型,就必须事先那些接口,同时还必须修改commoninfo.cs updateobject deleteobject的方法,耦合度比较大
这也是目前比较郁闷的地方。
还有就是如果接口的方法的增加,就必须修改三个命名空间下所有涉及到的东西,烦,亦是无可奈何的事情

第四步:
如果使用的话,我们都是需要用DataAccessFactory.CreateDataAccess等等方法来返回那些接口
一切都是依据接口,对于程序的可迁移性会好很多。

原文地址:https://www.cnblogs.com/wildfish/p/328939.html