XML メッセージをビジネス オブジェクトに解析したいとします。プロセスを次の 2 つの部分に分けます。
-XML メッセージを XML 文法オブジェクトに解析します。-XML オブジェクトをビジネス オブジェクトに変換します。
最初の部分は自動的に行われ、各ノードの文法オブジェクトが生成されます。
2 番目の部分は、これまでの 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 つのクラスを作成します。バージョンごとに 1 つ。
欠点: 適切なクラスを呼び出すには、親クラスごとに異なるクラスを作成する必要があります。
2) バージョン パラメータ: バージョンをパラメータとして持つオブジェクトを各メソッドに追加します。このようにして、各バージョンに応じて各メソッド内で何をすべきかがわかります。
短所:まったくきれいではありません。異なるバージョンのコードが混在しています。
3) 継承 + バージョン パラメーター: 直接変更されるノード (InnerChild など) の共通コードの基本クラスを持つ 2 つのクラスを作成し、各メソッドのパラメーターとしてバージョンを追加します。ノードが別のクラスを呼び出して子オブジェクトをデコードする場合、Version パラメータに応じていずれかのクラスが使用されます。
4) ある種のエグゼキュータ パターン (やり方がわからない): 最初に、使用されるすべてのメソッドが示されているある種の仕様オブジェクトを定義し、このオブジェクトをクラスに渡します。それらの実行を担当します。
どのようにしますか?他のアイデアを歓迎します。
前もって感謝します。:)