实现动态数据导入工具有什么好的设计模式?

时间:2008-12-19 20:16:41

标签: web-services design-patterns etl data-importer

我们计划构建动态数据导入工具。基本上以指定格式(access,excel,csv)在一端获取信息并将其上载到Web服务中。

情况是我们不知道导出字段名称,因此应用程序需要能够查看wsdl定义并映射到另一端的有效条目。

在导入部分,我们可以定义大多数字段,但通常它们有一些是自定义的。我认为没有问题。

我只是想知道是否有适合此类应用程序的设计模式或帮助开发它。

5 个答案:

答案 0 :(得分:2)

我不确定应用程序的复杂程度在哪里,所以我将举例说明我如何使用模式导入不同格式的数据。我创建了一个工厂,它将文件格式作为参数,并返回特定文件格式的解析器。然后我使用构建器模式。解析器提供了一个构建器,解析器在解析文件时调用该构建器以在应用程序中构造所需的数据对象。

// In this example file format describes a house (complex data object)
AbstractReader reader = factory.createReader("name of file format");
AbstractBuilder builder = new HouseBuilder(list_of_houses);
reader.import(text_stream, builder);

// now the list_of_houses should contain an extra house
// as defined in the text_stream

答案 1 :(得分:1)

我会说适配器模式,因为你正在“调整”从文件到对象的数据,比如SqlDataDataAdapter从Sql表到DataTable

每个文件类型/格式都有不同的适配器?示例SqlDataAdptor,MySqlDataAdapter,它们处理相同的命令但不同的数据源,以实现相同的输出DataTable

Adaptor pattern

HTH

答案 2 :(得分:0)

可能Bridge很适合,因为你必须处理不同的文件格式。 和Façade简化用法。小心处理我的回复,我只是在学习设计模式:)

答案 3 :(得分:0)

您可能还需要抽象工厂和命令模式。

如果数据与输入格式不匹配,您可能需要以某种方式对其进行转换。 这就是命令模式的用武之地。由于格式是动态的,因此您需要根据输入生成命令。这就是抽象工厂有用的地方。

答案 4 :(得分:0)

我们的情况是我们需要从竞争对手的文件中导入参数形状。它们的屏幕和数据字段的布局相似但足够不同,因此存在转换过程。此外,我们有超过六个竞争对手,如果仅通过代码进行维护将是一场噩梦。由于大多数人使用表来存储他们的形状参数,我们编写了一个通用的对象集合,将X转换为Y.

在我的CAD / CAM应用程序中,文件导入是一个命令。但是,转换魔法由规则集通过以下步骤完成。

  1. 将数据导入表格。根据格式,字段名称也会被拉入。
  2. 我们将表传递给RuleSet。我将在一分钟内解释规则集的结构。
  3. 规则集将数据转换为我们检索的一组新对象(或表)
  4. 我们将结果传递给软件的其余部分。
  5. RuleSet由一组规则组成。规则可以包含另一个规则。规则具有它测试的CONDITION和MAP TABLE。

    MAP TABLE将传入字段与结果中的字段(或属性)进行映射。可以有一个映射或多个。映射不必仅涉及将输入值戳入输出字段。我们也有计算和字符串连接的语法。

    此语法也用于条件,并且可以合并多个文件,如([INFIELD1]&“ - ”& [INFIELD2])=“A-B”或[DIM1] + [DIM2]> 10.括号之间的任何内容都被输入字段替换。

    规则可以包含其他规则。这种方式的工作方式是,为了使子规则映射同时应用它的条件和它的父级(或父级)的条件必须为真。如果子规则的映射与父映射冲突,则应用子规则映射。

    如果同一级别上的两个规则具有真实且具有冲突映射的条件,那么具有较高索引的规则(如果您正在查看树视图,则列表中的较低规则)将应用它的映射。

    嵌套规则等同于AND,而同一级别的规则等同于OR。

    结果是一个映射表,应用于传入数据以将其转换为所需的输出。

    在UI中显示是友好的。即显示规则层次结构的Treeview和显示规则的映射表和条件的侧面板。同样重要的是,您可以创建自动化常见规则结构的向导。