DTS开发记录(3)-- 连接与连接对
在 DTS开发记录(2)-- 数据管道及插件 一文中,我们介绍了数据管道,IDataPipeFactory的CreateDataPipe方法需要一个IConnection参数,这个参数就表示一个连接。
IConnection的定义如下:
/// 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开发记录(序)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构