我有一项必须完成的任务。我知道解决方案,但我想确保我的解决方案符合正确的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 /设计模式/架构方面是正确的。你能指出错误吗?什么可以做得更好或任何好方法?
答案 0 :(得分:0)
正如您可能理解的那样,没有正确设计这样的东西。我建议遵循标准做法。我会按照以下步骤操作:
这样,在更改某些内容(将来添加更多密钥,更改目标XML架构等)的情况下,您只需要更改XSLT中描述的转换过程,这不是应用程序代码,而是XML文件。您对应用程序中硬编码的特定翻译流程一无所知。
关于整体设计,我会选择使用Factory pattern。我认为这完全符合你的情况。
希望我帮忙!