DTOとBeanとEntityの違いとは、即答できず…現場でよくある疑問を整理!
とてぃです。最近仕事で「DTOとBean、Entityって何が違うの?」と聞かれて即答できず、復習を兼ねてまとめてみました。
現場でよく使う用語ですが、意外と説明があいまいになりがちなので、整理しておくと後輩や初心者に聞かれたときも安心です。
DTOとは
DTO(Data Transfer Object)は、異なるシステムや層(レイヤー)間でデータをやりとりするためのオブジェクトです。
主にWebアプリケーションやAPI開発で、コントローラやサービス層、DBアクセス層との間でデータを受け渡す「箱」の役割を果たします。
- SQLから取得したデータや、リクエスト・レスポンスのデータ構造を一時的に格納
- 基本的にgetter/setterのみを持つシンプルなクラスが多い
- バリデーションやビジネスロジックは原則持たない(データの運搬専用)
- EntityやFormなど他のオブジェクト間の変換にも使われる
Web開発をしていれば、知らずにDTOを使っていることが多いです。
Beanとは
Java Beanは、JSPやサーブレット、SpringなどのフレームワークでデータをやりとりするためのJavaオブジェクトです。
画面(JSP)項目やフォームの値を一時的に保持したり、セッションやリクエストスコープで使われます。
- JavaBeansの仕様(
public
な引数なしコンストラクタ、getter/setter、シリアライズ可能)を満たす - JSPやEL式(
${user.name}
など)で簡単にプロパティ参照が可能 - SpringやJSFなど多くのフレームワークで「Bean」として管理される
- DTOやEntityも広義にはBeanの一種(設計・命名の違い)
Beanも実は、知らず知らずのうちに使っていることが多いです。
Entityとは
Entityは、データベースのテーブルと1対1で対応する永続化用のオブジェクトです。
JPAやHibernateなどのORMフレームワークで、DBのレコードをJavaオブジェクトとして扱う際に利用されます。
- DBテーブルの1行(レコード)を表現するクラス
- クラス名とテーブル名、プロパティ名とカラム名が対応することが多い
- 永続化(保存・更新・削除)やDBアクセスのためのアノテーション(@Entityなど)が付与される
- 業務ロジックや画面表示用のプロパティは原則持たない(DB構造に忠実)
Entityは「DBとJava間のデータやりとり専用のBean」と考えると分かりやすいです。
DTO・Bean・Entityの違いまとめ
項目 | DTO | Bean | Entity |
---|---|---|---|
主な用途 | データ転送(層・システム間) | 画面やフレームワークとのデータやりとり | DBテーブルのデータ保持・永続化 |
仕様 | getter/setterのみ、ロジックなし | JavaBeans仕様(getter/setter、引数なしコンストラクタ、Serializable) | DB構造に忠実、@Entity等のアノテーション |
利用シーン | API、サービス層、データ変換 | JSP、Spring、JSFなどのフレームワーク | JPA/HibernateなどORM、DBアクセス層 |
ライフサイクル | 一時的なデータ運搬 | スコープ管理(セッション、リクエスト等) | 永続化(DBとの同期) |
バリデーション | 原則なし | 場合によっては持つことも | DB制約やアノテーションによる |
※現場によっては「DTO」「Bean」「Entity」を厳密に区別せず使っていることも多いですが、「何のためのクラスか」を意識して設計・命名すると、認識ズレが減ります。
よくある類似用語もチェック
- POJO(Plain Old Java Object):特別な制約のない、ただのJavaクラス。DTOやEntity、BeanもPOJOの一種。
- VO(Value Object):値のまとまりを表す不変クラス(イミュータブル)。主に識別子や属性値の集合を表現。
- Form:画面のフォーム入力値を保持するBean。DTOやEntityとは用途が異なる。
まとめ
DTO・Bean・Entityは現場でよく使うけど、意外と説明が難しい用語です。
初心者や後輩に聞かれても困らないように、違いを整理して覚えておくと安心ですね。
- DTOは「データ転送専用の箱」
- Beanは「画面やフレームワークと連携するJavaオブジェクト」
- Entityは「DBテーブルと1対1で対応する永続化用クラス」
- 現場やプロジェクトでの命名・設計ルールも確認しよう
最後まで読んでいただきありがとうございました。
ディスカッション
コメント一覧
まだ、コメントがありません