DTO(Data Transfer Object)
エンティティの中から必要な値だけを取得したクラス。データを転送する目的で定義されるクラス
だからエンティティの中に例えば、ユーザーエンティティの中に電話番号、氏名、住所、年齢が定義されてて、その中の氏名と年齢だけ使いたいのに、ユーザーごと呼び出したら、いらない電話番号とか住所も取得しちゃう。そうすると処理が重くなるから必要なものだけ欲しい…。そんな時DTOクラスを作れば、氏名と年齢の情報だけ取ってこれる的なイメージ。
DAO(Data Access Objec)
データベースなどから「情報を取り出したり、更新したりするための専用のクラス」
リポジトリクラスの子分みたいなやつ。
DAOとDTOを「おもちゃ箱」で例えると…
・DAOは「おもちゃ箱の管理人」みたいなもの! → おもちゃ(データ)がたくさん入っているけど、どれを取り出すか決めて、箱から出し入れする役割だよ。
・DTOは「持ち運び用のおもちゃセット」みたいなもの! → おもちゃ箱にはいろんな種類のおもちゃがあるけど、外で遊ぶときは全部持って行くのは大変だから、遊びたいものだけを小さなバッグに入れる感じ。
つまり、DAOがデータを取り出す仕事をして、DTOが「必要なデータだけ運ぶためのバッグ」になる。
DAOとリポジトリは何が違うの?
DAOとリポジトリ(Repository)は似ているけど、考え方がちょっと違う。
・DAO(データベース専用の管理人) → 「データベースとのやり取りに特化」した人。例えば、SQLを使って「このデータを取ってきて!」って指示する役割。
・リポジトリ(より広い管理人) → DAOを使いながら「データの管理を全般的にする」人。データベースだけじゃなくて、外部APIやキャッシュなども含めて、より抽象的にデータを取り扱う。つまりDAOより偉い人。
簡単に言、 DAOは「データベースのプロ」、リポジトリは「データ全体の管理者」! リポジトリはDAOを使うことが多いけど、DAOより広い範囲を管理する
下記サイトを参考にしました
4.2 DAO/DTOパターン | 神田ITスクール
DAO,DTO,Entity, findAll, findByld - Qiita