システム内のエンティティの 2 つの表現があります。
表現 A は、最新の推奨される実装としてシステム全体で使用されます。
表現 B は、レガシー システムの特異な動作に対応するために使用されます。
エンティティを永続化するときに、A から B への変換を行いたいと考えています。
これにはどのような実装パターンを使用できますか?
翻訳機能をカプセル化する「アダプター」を実装するのは正しいでしょうか? または、より良い用語/方法はありますか?
システム内のエンティティの 2 つの表現があります。
表現 A は、最新の推奨される実装としてシステム全体で使用されます。
表現 B は、レガシー システムの特異な動作に対応するために使用されます。
エンティティを永続化するときに、A から B への変換を行いたいと考えています。
これにはどのような実装パターンを使用できますか?
翻訳機能をカプセル化する「アダプター」を実装するのは正しいでしょうか? または、より良い用語/方法はありますか?
おそらく、アダプタとファクトリを組み合わせるか、通常の継承のみを使用することをお勧めします。
優先実装からインターフェイス A を抽出し、ラッパー クラスを実装します。
public interface A {
<methods>
}
public class PreferredImplementation implements A {
<methods>
}
public class AdaptorForOldClass implements A {
private final OldClass wrapped;
public AdaptorForOldClass(final OldClass toWrap) {
this.wrapped = toWrap;
}
<methods>
}
あなたの要件は、クラスAを永続化する間だけクラスAをBにマップすることだと思います。この目的のために、データ転送オブジェクトを使用するだけで、永続層がこの DTO からクラス B へのマッピングを行うことができると思います。必要な要件がはるかに多くない限り、アダプターの設計パターンの使用は実際にはわかりません。述べました。