2017-04-21 13 views
1

すべてのフィールドがほぼ同じ6つのPOJOクラス(ドメインエンティティ、DTO、DMO)にあります。あるオブジェクトを別のオブジェクトに変換するには、あるオブジェクトを渡してそのゲッターを呼び出して別のオブジェクトに設定します。パラメータで渡されるオブジェクトの汎用コールの実際のメソッド

private UserTemp convertDmoToUserTempEntity(final UserDmo userDmo) { 
    final UserTemp userTemp = new UserTemp(); 
    userTemp.setUsername(userDmo.getUsername()); 
    userTemp.setPassword(userDmo.getPassword()); 
    userTemp.setStatus(userDmo.getStatus()); 
    return userTemp; 
} 

private UserDmo convertEntityToUserDmo(final UserTemp userTemp) { 
    final UserDmo userDmo = new UserDmo(); 
    userDmo.setUserId(userTemp.getUserId()); 
    userDmo.setUsername(userTemp.getUsername()); 
    userDmo.setStatus(userTemp.getStatus()); 
    return userDmo; 
} 

別のエンティティからのように、これらの変換の多くがありますが、DTO DMO、DMOになどDTOに私はこれを処理するためのより良い方法は、ソースオブジェクトと宛先オブジェクトを渡して、ジェネリックだろうと信じています。

public static <E, T> T convert(E e, T t) { 
    //call getter of source object to set it in destination object. 
    return t; 
} 

UserConverterImpl.convertFromTempToUser(userTemp, user); 

私はこれに助けが必要です。私はパラメータでオブジェクトを渡すとき、私は方法が必要です。これを達成するためのより良い方法はありますか?

+2

すべてのクラスは、唯一の方法は、答えを –

答えて

1

フレームワークを使ってみることができます。過去に私はこれを行うためにドーザーを使用しました。

次の投稿では、他のフレームワークについても言及しています。 any tool for java object to object mapping?

(いくつかのアドバイス:JPAエンティティオブジェクトをマッピングすると、自動的にフレームワークによってマッピングされている怠惰なフィールドに注意)

おそらく、あなたはしたくない/何らかの理由で別のフレームワークを使用することはできません。 厳密なレイヤリングがあるようだから、おそらく各レイヤーのマッパーがあります。それから私は各オブジェクトのための別のマッピングのために行くだろう。こうすることで、ユーザー名からユーザーIDなどへのマッピングを簡単に行うことができます。レイヤー内のすべてのオブジェクトのメソッド名がまったく同じである可能性はそれほど高くなく、おそらく変更される可能性があります。

+0

おかげで必要になるので、あなたがインターフェイスを作成する必要があります(ほぼ)同じメソッドを持っている場合。私はDozerを使ってみましたが、UUIDタイプを自動マップできませんでした。私は、代わりにSpringフレームワークBeanUtilsを見つけました。 –

0

春のBeanUtilsを使用して終了しました。

BeanUtils.copyProperties(Object source, Object target)

関連する問題