假设我们要将 XML 消息解析为业务对象。我们将流程分为两部分,即:
- 将 XML 消息解析为 XML 语法对象。-将 XML 对象转换为业务对象。
第一部分是自动完成的,为每个节点生成一个语法对象。
到目前为止,第二部分是按照 XML 架构完成的。例子:
如果我们有 XML 消息(简体):
<Main>
<ChildA>XYZ</ChildA>
<ChildB att1="0">
<InnerChild>YUK</InnerChild>
</ChildB>
</Main>
我们可以找到以下类:
DecodeMain(Calls DecodeChildA and B)
DecodeChildA
DecodeChildB(Calls DecodeInnerChild)
DecodeInnerChild
当我们需要处理相同消息的版本时,主要问题就出现了。假设我们有一个只有 DecodeInnerChild 更改的新版本(例如:我们需要在值的末尾添加一个“a”)
解决方案对于更多版本的敏捷性和尽可能干净是非常重要的。我考虑了以下选项:
1)简单继承:创建两个DecodeInnerChild类。每个版本一个。
缺点:我需要为每个父类创建不同的类来调用正确的类。
2)版本参数:为每个方法添加一个以版本为参数的对象。这样,我们将根据每个版本知道在每个方法中要做什么。
缺点:一点都不干净。不同版本的代码是混用的。
3)继承+版本参数:为直接改变的节点(如InnerChild)的公共代码创建2个基类,并在每个方法中添加版本作为参数。当一个节点调用另一个类来解码子对象时,它将根据版本参数使用一个或另一个类。
4)某种执行者模式(我不知道怎么做):在开始时定义某种规范对象,其中指示了将要使用的所有方法,我将这个对象传递给一个类负责执行他们。
你会怎么做?欢迎其他想法。
提前致谢。:)