SpringMVC、JPA2を使用して簡単なフォーラムWebアプリケーションを開発しています。DBテーブル構造を反映するUser、Forum、PostなどのJPAエンティティを作成しました。
ただし、UIにデータを表示するときは、エンティティを使用してUIに表示するデータを常に保持できるとは限らないため、DTOが必要です。
例:パスワードの変更画面。ここでは、古いパスワード、新しいパスワードを保持し、新しいパスワードを確認する必要があります。ただし、ユーザーエンティティにはOld / New / Confirm Pwdフィールドはなく、Passwordだけがあります。したがって、Webレイヤーとサービスレイヤーの間の単なるデータキャリアであるDTOを作成する必要があります。
私の質問は、DTOオブジェクトの作成中に、すべてのプロパティをDTO自体に配置するか、エンティティをDTOでラップして、必要な追加のプロパティを追加する必要があるかということです。
例:ユーザー画面の編集の場合、
public class UserDTO
{
private User user; // User is a JPA entity
// setters & getters
}
これにより、基盤となるUserエンティティをサービスレイヤーに渡すことができます。ただし、UIプロパティをDTOにバインドするときに、PropertyEditorsを関連付ける必要があります。
(また)
public class UserDTO
{
private String userId;
private String userName;
private String password;
// setters & getters
}
このアプローチでは、DTOプロパティをJPAエンティティに変換してコピーし、サービスレイヤーに渡す必要があります。
どちらのアプローチが良いですか?または、DTOをまったく使用しない他のアプローチはありますか?