我们正计划构建一个动态数据导入工具。基本上以指定格式(access、excel、csv)在一端获取信息并将其上传到网络服务中。
情况是我们不知道导出字段名称,因此应用程序需要能够看到 wsdl 定义并映射到另一端的有效条目。
在导入部分,我们可以定义大部分字段,但通常它们有一些是自定义的。我认为这没有问题。
我只是想知道是否有适合这种类型的应用程序或有助于开发它的设计模式。
我们正计划构建一个动态数据导入工具。基本上以指定格式(access、excel、csv)在一端获取信息并将其上传到网络服务中。
情况是我们不知道导出字段名称,因此应用程序需要能够看到 wsdl 定义并映射到另一端的有效条目。
在导入部分,我们可以定义大部分字段,但通常它们有一些是自定义的。我认为这没有问题。
我只是想知道是否有适合这种类型的应用程序或有助于开发它的设计模式。
我不确定您的应用程序的复杂性在哪里,所以我将举例说明我如何使用模式来导入不同格式的数据。我创建了一个工厂,它将文件格式作为参数并返回特定文件格式的解析器。然后我使用构建器模式。解析器提供了一个构建器,解析器在解析文件以在应用程序中构造所需的数据对象时调用该构建器。
// 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
我会说适配器模式,因为您正在将数据从文件“调整”到对象,就像 SqlDataDataAdapter 从 Sql 表到 DataTable 一样
每种文件类型/格式都有不同的适配器?例如 SqlDataAdptor、MySqlDataAdapter,它们处理相同的命令但不同的数据源,以实现相同的输出 DataTable
高温高压
骨头
可能 Bridge 可能适合,因为您必须处理不同的文件格式。和 Façade 以简化使用。小心处理我的回复,我只是在学习设计模式:)
您可能还需要抽象工厂和命令模式。
如果数据与输入格式不匹配,您可能需要以某种方式对其进行转换。这就是命令模式的用武之地。因为格式是动态的,所以您需要基于输入生成的命令。这就是抽象工厂有用的地方。
我们的情况是我们需要从竞争对手文件中导入参数形状。它们的屏幕和数据字段的布局相似但又足够不同,以至于有一个转换过程。此外,我们有超过六个竞争对手,如果仅通过代码完成维护将是一场噩梦。由于他们中的大多数使用表格来存储他们的形状参数,我们编写了一个通用的对象集合来将 X 转换为 Y。
在我的 CAD/CAM 应用程序中,文件导入是一个命令。然而,转换魔法是由规则集通过以下步骤完成的。
RuleSet 由一组规则组成。一个规则可以包含另一个规则。规则有一个它测试的条件和一个映射表。
MAP TABLE 将传入字段与结果中的字段(或属性)进行映射。可以有一个映射或多个映射。映射不必只涉及将输入值插入输出字段。我们也有用于计算和字符串连接的语法。
此语法也用于 Condition 并且可以合并多个文件,例如 ([INFIELD1] & "-" & [INFIELD2])="AB" 或 [DIM1] + [DIM2] > 10。括号之间的任何内容都替换为传入字段。
规则可以包含其他规则。它的工作方式是,为了使子规则映射同时应用它的条件和它的父(或父)的条件,必须为真。如果 subRule 的映射与父映射冲突,则应用 subRule 映射。
如果同一级别的两条规则的条件为真并且映射冲突,则具有较高索引的规则(或者如果您正在查看树视图,则在列表中较低)将应用其映射。
嵌套规则等效于 AND,而同一级别的规则等效于 OR。
结果是一个映射表,该表应用于传入数据以将其转换为所需的输出。
在 UI 中显示是友好的。即显示规则层次结构的树视图和显示规则的映射表和条件的侧面板。同样重要的是,您可以创建自动化常见规则结构的向导。