文件转换问题的最佳方法

时间:2013-12-24 15:35:44

标签: oop design-patterns architecture

我有一项必须完成的任务。我知道解决方案,但我想确保我的解决方案符合正确的OOP /设计模式。这是scenerio

1-我有2个不同格式的文件。 (让我们说FormatA和FormatB)。

2-我想将FormatA中的数据转换为FormatB。

3- FormatA是带有键的纯文本文件。每个新行都是新的     键/值对。 FormatB是XML。

4- FormatA文件中的键可以与FormatB中的键相同,但也可以不同。有时我们可能需要做一些计算来转换     值为FormatB。

5-有些机会有更多的钥匙     将来添加到旧的或新的。

我的解决方案:

我希望解决方案是通用的,不需要硬编码。因此,如果将来某些键映射发生变化,那么我就不应该更改代码。

1-首先,我创建了一个“映射”XML文件,其中包含FormatA中键的所有数据映射到FormatB中的哪个字段。 XML结构就是这样的

//oldKey = name of the key in the old file format
//newKey = name of the key in the new format
//ignore = optional. set it to true if you want to ignore this field during conversion
//function = optional.Name of a function that will be called. This function will have all the logic to do the calculations
//functionparams = optinal .key names from the old file that need calculation
//defaultvalue = optional parameter. This value will be replaced no matter what if given.

<field oldKey="abc" newKey="def" ignore="false" function="MultiplyBy2" functionparams="abc" defaultvalue="4">

2-我创建了一个名为“TextFileParser”的类,它加载文本文件并使用所有键创建一个字典。

3-我创建了一个名为“MappingXMLParser”的类,它加载Mapping XML文件并使用所有数据填充字典。

3-我创建了一个“TextFileToXML”类,它使用上面的两个类来编写XML文件中的数据。没有使用任何成分。

4-我创建了一个名为“Conversion”的类。如果Mapping XML文件声明了一些函数(如“MultiplyBy2”),那么函数的定义将在此类中。我将使用反射从类“TextFileToXML”调用此类的方法。

这是我的设计,但我不知道它在OOP /设计模式/架构方面是正确的。你能指出错误吗?什么可以做得更好或任何好方法?

1 个答案:

答案 0 :(得分:0)

正如您可能理解的那样,没有正确设计这样的东西。我建议遵循标准做法。我会按照以下步骤操作:

  1. 按照最简单的XML架构
  2. 将键值文件转换为简单的XML文件
  3. 我会使用XSLT来描述步骤1中生成的简单XML文件与最终结果之间的转换。
  4. 使用XML操作库执行XSLT中描述的转换。我想你可以用你使用的特定编程语言找到一个。
  5. 这样,在更改某些内容(将来添加更多密钥,更改目标XML架构等)的情况下,您只需要更改XSLT中描述的转换过程,这不是应用程序代码,而是XML文件。您对应用程序中硬编码的特定翻译流程一无所知。

    关于整体设计,我会选择使用Factory pattern。我认为这完全符合你的情况。

    希望我帮忙!