0

私は 1 つの翻訳サーバーを設計しようとしています。RootClassローカル システムには 1 つの POJO クラス ( ) があります。また、リモートオブジェクト()をシステムに送信するリモートシステムもありますRemoteClass。このサービスの役割は、Remote クラスを Root クラスに変換することです。問題は、非常に多くの種類があることです。例えば200種類以上。この翻訳を行うには、巨大な if-else を書く必要があります。

この質問を説明するために、いくつかの疑似コード コードをリストします。

public class RootClass  {
    public String type;
    public String attr1;
    public String attr2;
    public String attr3;
    public String attr4;
}


public class RemoteClass  {
    public String type;
    public String attr1;
    public String attr2;
    public String attr3;
}


public class Translator{

     public RootClass translate(RemoteClass remote) {
         RootClass root = new RootClass();

         if ("a".equals(remote.type ))  {
             root.type = "veryGood";
             if ("one".equals(remote.attr1)) {
                  root.attr2 = "true";
             }
             if ("two".equals(remote.attr1)) {
                 root.attr3 = "true";
             }
             if ("1".equals(remote.attr1) && "2".equals(remote.attr2) ) {
                 root.attr4 ="good";
             }

         } else if ("b".equals(remote.type)) {
             root.type = "good";
             if ("one".equals(remote.attr1)) {
                 root.attr2 = "1";
             } else if ("two".equals(remote.attr1)) {
                 root.attr2 ="2";
             }

         }  else if ("c".equals(remote.type)) {
             root.type = "good";
             if (remote.attr2.indexOf(":") > 0 )  {
                 String[] strArray = remote.attr2.split(":");
                 root.attr2=strArray[0];
                 root.attr3=strArray[1];
             }

         }

     }
}

2 つのオブジェクトは、まったく異なる構造を持つ 1 つのものを記述します。ルートクラスは我々のシステムのカーネルであり、ストラットすることは不可能であり、このルートクラスはローカルシステムに非常に適していると考えています. リモート クラスの場合は、変更する権限のないサード パーティ システムから取得されます。そのため、この翻訳は非常に難しくなっています。

削除する予定は、翻訳用に 200 以上のアダプターを作成することです。例:

public class adopterA implements RootAdoper {
public RootClass translate(RemoteClass remote) {
    RootClass root = new RootClass();
    root.type="veryGood";
    if ("one".equals(remote.attr1)) {
        root.attr2 = "true";
    }
    if ("two".equals(remote.attr1)) {
        root.attr3 = "true";
    }
    if ("1".equals(remote.attr1) && "2".equals(remote.attr2) ) {
        root.attr4 ="good";
    }
}

}

そして、それらすべてを HasMap に入れます

Map<String, RootAdoper> map = new HashMap<String, RootAdoper>();

しかし、if/else をラップする 200 の小さなクラスがまだあります。この複雑な問題を解決するための適切なパターンまたは設計はありますか? 前もって感謝します。

4

1 に答える 1