zoukankan      html  css  js  c++  java
  • DTS开发记录(3)-- 连接与连接对

         在 DTS开发记录(2)-- 数据管道及插件 一文中,我们介绍了数据管道,IDataPipeFactory的CreateDataPipe方法需要一个IConnection参数,这个参数就表示一个连接。

    public IDataPipe CreateDataPipe(IConnection conn)

        IConnection的定义如下:

        /// <summary>
        
    /// IConnection 用于表示到数据源或数据目标的连接
        
    /// </summary>
        public interface IConnection
        {
            ConnectionType ConnectionType { 
    get;}
            
    string ConnectionText { get;}
            
    string PKeyName { get;set; }
        }

        
    public enum ConnectionType
        {
            DataBase ,File
        }

        无论该连接是指向数据库的一个表还是某个结构化的文件,都需要设定一个主键名称,设定该主键名称的作用在于两个方面:
    (1)用于分页(有的数据库可能不需要知道主键就可以分页,比如Oracle)
    (2)用于增量导出。

        到目前为止,连接分为两种类型--数据库类型和文件类型。对于数据库类型的连接,可以用连接字符串来标志;对于文件类型的连接,可以使用文件路径来标志。
        我们知道,数据库分为不同的类型,这是由DataBaseType标志的;那么,文件也有不同的类型,比如.Xml、.Txt等,怎么区分它们了?是的,使用文件的扩展名,因为同一类型的文件的扩展名是相同的。所以,我们看到FileConnection有个ExtendName属性。
        ConnectionText属性,就像ToString()方法一样,这样当我们需要在UI上显示IConnection时,可以取用其ConnectionText属性的值。对于文件类型的连接,它将返回文件路径;对于数据库类型的连接,它将返回连接字符串及目标数据表的名字。
        下面是FileConnection和DatabaseConnection的类图:



        讲到这里,我可以大致说一下IDataPipeFactory创建数据管道的过程。首先,从IConnection中获取ConnectionType,如果是文件类型,则将之向下转换到FileConnection,然后得到ExtendName属性,最后在数据管道插件列表中寻找支持该ExtendName的数据管道插件。对于数据库类型的IConnection,过程也是相似,只不过,它是依据DataBaseType来寻找对应的数据管道插件。
        如果和数据管道插件对照起来看,就更清楚了:



        连接对(ConnectionPair),一个连接对包含了一个数据源和一个数据目标的连接信息。将连接对独立出来的好处是,当配置好一个连接对后,可以在不同的地方复用它,比如在编辑映射的时候、在数据验证的时候、在数据传送的时候等。


        使用ConnectionPair可以使我们的程序结构非常的清晰,因为它抽象了底层的连接类型。但是,在通过界面来配置ConnectionPair时,就不那么容易了,你会迫不得已的遇到很多向下转换,我正在思考一种解决方案来避免这种向下转换。你有好的想法吗?


    转到:DTS开发记录(序)

  • 相关阅读:
    edgedb 内部pg 数据存储的探索 (四) 源码编译
    edgedb 内部pg 数据存储的探索 (二) 创建数据库命令说明
    edgedb 内部pg 数据存储的探索 (三) 源码包setup.py 文件
    python 集成cython && push 测试pip 仓库
    python 集成cython 简单测试
    click python cli 开发包
    转载一篇阿里云Terraform 开发指南
    zabbix 4.2 支持 timescledb 了
    edgedb 内部pg 数据存储的探索 (一)基本环境搭建
    Podman and Buildah for Docker users
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/442548.html
Copyright © 2011-2022 走看看