フローが基本的に次のようなサービスがあります。
- 入力オブジェクトを受け取ります。これは単なる POJO オブジェクトであり、私はその設計についてあまり発言権を持っていません。
- サービスの正規化されたオブジェクトに変換します。
- 正規化されたオブジェクトに対していくつかのビジネス ロジックを実行し、それに関する追加データを収集します。
- データが渡される別のサービスの出力オブジェクトに変換します。(別の POJO。)
- 変換されたデータを別のサービスに渡します。
ただし、これが意味することは、私のサービスのかなりの部分が typeInputFoo
から typeNormalizedFoo
からtype に変換されているということOutputFoo
です。
これはかなり簡単な作業です。私は Google コレクション ライブラリを使用しており、次のようなクラスを持つことができます。
public class InputFooToNormalizedFooConverter implements Function<InputFoo, NormalizedFoo> {
public NormalizedFoo apply(InputFoo input) {
NormalizedFoo output = new NormalizedFoo();
output.setProperty(input.getProperty());
}
}
そして、このような別のクラス:
public class NormalizedFooFooToOutputFooConverter implements Function<NormalizedFoo, OutputFoo> {
public NormalizedFoo apply(InputFoo input) {
NormalizedFoo output = new NormalizedFoo();
output.setProperty(input.getProperty());
}
}
しかし、各タイプの Foo には基本的に次のような階層があります。
public class Foo {
List<Bar> barItems;
// .. other properties
}
public class Bar {
List<Baz> bazItems;
List<Quux> quuxItems;
// .. other properties
}
public class Baz {
// .. other properties
}
public class Quux {
// .. other properties
}
これNormalizedFooToOutputFooConverter
は、NormalizedBarToOutputBarConverter implements Function<NormalizedBar, OutputBar>
タイプなどを持っていることを意味します。
さらに悪いことに、入力は正規化されたモデルと完全には一致しません。それはもっと似ています
public class InputFoo {
public List<InputBar> bars;
public List<InputBaz> bazs;
public List<InputQuux> quuxs;
// .. other properties
}
public class InputBar {
private String barId;
// .. other properties
}
public class InputBaz {
private String barId;
private String bazId;
// .. other properties
}
public class InputQuux {
private String barId;
private String quuxId;
// .. other properties
}
これらのモデルでは、それぞれが持っているに基づいて、どれがどれBaz
にQuux
属しているかを把握できます。Bar
barId
この時点で、Input
toNormalized
およびNormalized
to に移動するための約 20 の異なるコンバーターがありOutput
ます。さらに悪いことに、それらのいくつかはReallyLongInputTypeToReallyLongNormalizedTypeConverter
非常に長いクラス名を作成するような名前を付けています。すべてのコンバーターで、ここで何か間違ったことをしているように感じます。コンバーターを整理するより良い方法はありますか?