通过前面两篇文章(已于2006-07-03修正)的介绍,我们已经大致明白了系统的目标的总体结构,从这篇文章开始,我们将逐渐深入到系统内部。
本文讲述数据管道,数据管道是用于在数据源/数据目标与DataTable之间进行数据传递的组件,它是与数据库类型和文件类型相关的,数据从数据源经过数据管道后,就变成与数据源类型无关的数据了,这样映射编辑和数据引擎便能对它们进行一致的处理。
数据管道接口定义的类图如下:
数据管道接口IDataPipe从另外两个接口继承:数据导入器(IDataImporter)和数据导出器(IDataExporter)。数据导入器用于从数据源读取指定页的大小的数据到DataTable中。为何要分页读取数据,那是因为当数据源中的记录非常多时,一次读取并传递所有的数据是不合适了,这时可以采用分页进行分批数据处理。数据导出器用于将数据导出到数据目标。
目前,我们的数据源/数据目标可以分为两大类:文件和数据库。所以,从IDataPipe派生了两个接口--IFileDataPipe和IDbDataPipe,用来分别对应连接到文件的数据管道和连接到数据库的数据管道。
为了根据文件或数据库的类型来创建合适的数据管道,所以我们需要一个工厂IDataPipeFactory来完成这件事:
可以预见,在以后的应用中会有更多的数据库类型和文件类型加入进来,为了避免每次加入一个新的数据库类型或文件类型时都需要改动系统源码并重新编译发布,我们将数据管道做成插件(Addin),这样当我们需要支持一种新的文件类型或数据库类型时,只需要添加一个插件即可,原来的系统不用修改和重新编译。
于是,我们可以借助插件管理器IAddinManager(参见ESFramework插件部分)来实现数据管道工厂IDataPipeFactory。
许多朋友一定觉得这篇文章讲的太粗,这是我刻意为之的。很抱歉!因为这毕竟不是一个开源项目,它的所有权也不属于我个人(尽管它完全是我个人一手设计的),而是属于我现在所在的公司,所以我只能点到为止,介绍一些原理性的东西,供后来者参考。
转到:DTS开发记录(序)