私は 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 の小さなクラスがまだあります。この複雑な問題を解決するための適切なパターンまたは設計はありますか? 前もって感謝します。