2008-12-19 33 views
1

我们计划建立一个动态的数据导入工具。基本上以指定格式(access,excel,csv)获取一端的信息并将其上载到Web服务中。实现动态数据导入器工具的良好设计模式是什么?

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

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

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

回答

0

可能Bridge可能适合,因为你必须处理不同的文件格式。 和Facade可以简化使用。小心处理我的答复,我只是在学习设计模式:)

+0

谢谢。欣赏诚实。 – Geo 2008-12-19 20:23:00

+0

在这里,Facade并没有太多的工作,因为我的界面和类分布很好,而且易于使用。但是感谢Bridge的领导。 – Geo 2009-01-04 04:07:14

0

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

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

1

我要说的适配器模式,因为你是从一个文件“调整”的数据对象,像SqlDataDataAdapter它与SQL表到DataTable

为每个文件类型不同的适配器/格式?例如SqlDataAdptor,MySqlDataAdapter的,他们处理相同的命令,但不同的数据源,才达到相同的输出数据表

Adaptor pattern

HTH

骨头

0

我们的情况是,我们需要导入从参数形状竞争对手档案他们的屏幕和数据字段的布局是相似的,但不同的是有一个转换过程。另外,我们有超过六个竞争对手,如果仅通过代码进行维护,维护将是一场噩梦。由于大部分都使用表来存储它们的参数为它们的形状我们写对象的通用集合X转化成Y.

在我的CAD/CAM应用程序的文件导入命令。然而,通过以下步骤通过规则集完成转换魔术。

  1. 将数据导入的表。取决于格式,字段名称也被拉入。
  2. 我们将表传递给RuleSet。我将在一分钟内解释规则集的结构。
  3. 规则集将数据转换成一组我们检索的新对象(或表)
  4. 我们将结果传递给软件的其余部分。

规则集是一组规则的包括。规则可以包含另一个规则。规则有它测试一个条件,并映射表。

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

该语法也可用于条件和可以结合多个文件等([INFIELD1] & “ - ” & [INFIELD2])= “AB” 或[DIM1] + [DIM2]> 10.括号之间任何被一个输入字段替换。

规则可以包含其他规则。这样做的方式是,为了使子规则映射应用它的条件,以及它的父代(或父代)的条件必须是真实的。如果子规则具有与父代映射冲突的映射,则应用子规则映射。

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

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

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

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

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 
相关问题