こんにちは!ログログです!
34歳で開発未経験から開発エンジニアになり、今ではフリーランスエンジニアとして働いています!
DtoとEntityって何やら似てるけど違うもので、更に詰め替えが必要なので面倒ですよね。
基本的な詰め替えはGetter/Setterを使って実装するのが一般的です。
ただし、色んなところに詰め替えのコードが書かれるのは保守性を下げるので、詰め替えのメソッドはDtoとEntityに実装するのがおススメです。
本記事では基本的なDtoとEntityの詰め替えの実装を解説していきます!
DTOとEntityの違い
そもそもなぜDTOとEntityで分けられているのかと言うと、それは役割の違いからです。
DTO
DTOはデータの転送を目的としたオブジェクトです。通常、クライアントとサーバー間、あるいはサービス間のデータの受け渡しに使用されます。また、DTOはビジネスロジックを持たず、単にデータのコンテナとしての役割を果たします。
Entity
Entityはデータベース内のデータを表現するために使用されるオブジェクトです。Entityはビジネスロジックとデータ永続性を持ち、データベースの行またはテーブルに対応することが一般的です。Entityはアプリケーションの内部で使用され、データの永続性とビジネスルールの実行を担当します。
小難しいことを書きましたが、DTOはデータの転送が目的のデータが詰まった入れ物で、EntiyはDBとのアクセスに使用されるオブジェクトということです。
画面上に表示する時にEntityからDTOに変換するのは、こういった役割の違いからなのです。
実装方法
DTOとEntityが1対1であるケースでコード例を示しています。
変換するメソッドを各クラスが持つ形になっているのは、自身が変換に必要なデータを持っているためです。
データを持っているクラスが責務を負うというのがオブジェクト指向の基本的な考え方ですので、これを機会に覚えておいて下さい。
DTOをEntityに変換する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import lombok.Getter; import lombok.Setter; @Getter @Setter public class UserDto { private Long id; private String userName; private String email; // Entityに変換する public User toEntity() { User user = new User(); user.setId(id); user.setUserName(userName); user.setEmail(email); return user; } } |
EntityをDTOに変換する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import lombok.Getter; import lombok.Setter; @Getter @Setter public class User { private Long id; private String userName; private String email; // Dtoに変換する public UserDto toDto() { UserDto dto = new UserDto(); dto.setId(id); dto.setUserName(userName); dto.setEmail(email); return dto; } } |
toEntityとtoDtoのいずれにおいても、最初にnewされていることに注目して下さい。
変換する際は基本的に新しいオブジェクトを生成することになります。既存のオブジェクトを使いまわすと、思わぬ副作用が出る可能性があるので、よっぽどのことが無い限り、新規オブジェクトを生成するようにして下さい。
まとめ
- DTO、Entityクラスでメソッドを実装するのが基本的な変換方法である。
- データを持っているクラスがメソッドを実装するのがオブジェクト指向の基本。
- 変換時は新規オブジェクトを生成するようにする。
コメント