zoukankan      html  css  js  c++  java
  • 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等等方法来返回那些接口
    一切都是依据接口,对于程序的可迁移性会好很多。

  • 相关阅读:
    文件过滤驱动隐藏目标文件
    POJ 3345 Bribing FIPA(树形DP)
    POJ 1018 Communication System(分组背包DP)
    无用的,ring0暴力枚举进程模块
    HDOJ 3496 Watch The Movie(基本二维背包)
    栈回溯法的一个例子
    代码这样写奇丑无比...编码前期要做好规划工作啊
    多核发dpc安全inline hook
    纵我不往,知识不来学习Java第一周心得
    对“TD信息树”的使用体验
  • 原文地址:https://www.cnblogs.com/wildfish/p/328939.html
Copyright © 2011-2022 走看看