同じインターフェイスを実装する他のオブジェクトから自分自身を作成できるドメイン オブジェクトをコーディングしようとしています。また、基本的に単純なドメイン転送オブジェクトである他の実装に変換できるようにコーディングしています。私はジャクソンを使用して実装間で自動的に変換し、手動オブジェクト変換のエラーが発生しやすいボイラープレートを減らしています。
例で示す方がおそらく簡単です。
//base class
public abstract class DO<T extends Object> {
public abstract T toDTO();
public abstract DO<T> fromDTO(T t);
}
//concrete implementation
public class MyDO extends DO<MyDOInterface> implements MyDOInterface {
public MyDO fromDTO(MyDTO r){
ObjectMapper mapper = new ObjectMapper();
return mapper.convertValue(r, MyDO.class);
}
public MyDTO toDTO() {
ObjectMapper mapper = new ObjectMapper();
return mapper.convertValue(this, MyDO.class);
}
//getters and setters from MyDOInterface
}
現在、これは DTO を作成するときには問題なく機能しますが、逆の場合は少し面倒です。ドメイン オブジェクトを作成するには、次のようにする必要があります。
MyDO myDO = new MyDO().fromDTO(aDTOInstance);
fromDTO(...) を呼び出すために空のオブジェクトを作成します。
これを回避するために、コンストラクターまたは静的メソッドで DTO を渡すことができる単純なものが欠けていると感じています。または、DO 自体のファクトリ メソッドでさえありますが、それが何であるかはわかりません。誰でもこの作業を行う方法を見ることができますか?