0

フローが基本的に次のようなサービスがあります。

  1. 入力オブジェクトを受け取ります。これは単なる POJO オブジェクトであり、私はその設計についてあまり発言権を持っていません。
  2. サービスの正規化されたオブジェクトに変換します。
  3. 正規化されたオブジェクトに対していくつかのビジネス ロジックを実行し、それに関する追加データを収集します。
  4. データが渡される別のサービスの出力オブジェクトに変換します。(別の POJO。)
  5. 変換されたデータを別のサービスに渡します。

ただし、これが意味することは、私のサービスのかなりの部分が 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
}

これらのモデルでは、それぞれが持っているに基づいて、どれがどれBazQuux属しているかを把握できます。BarbarId

この時点で、InputtoNormalizedおよびNormalizedto に移動するための約 20 の異なるコンバーターがありOutputます。さらに悪いことに、それらのいくつかはReallyLongInputTypeToReallyLongNormalizedTypeConverter非常に長いクラス名を作成するような名前を付けています。すべてのコンバーターで、ここで何か間違ったことをしているように感じます。コンバーターを整理するより良い方法はありますか?

4

0 に答える 0