2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DTO(formクラス、コマンドオブジェクト)とは???

2
Last updated at Posted at 2026-10-31

本記事のナラティブ

なんとなくSpringでの開発で使用するDTOという単語と機能
理解を明確にすべく、叩き台として書き起こしたレポート

認識を文字起こし

Springを勉強していて、突き当たるワード「 DTO 」
JavaのDB連携を行う際に欠かすことのできない「 Entity 」
これらに共通する構造はクラスであること

DTO ⇒ クライアントとサーバーとのインタフェース連携
Entity ⇒ サーバーのインフラにおけるDB連携

DTOやEntityというデータ連携用クラスのことを書こうとすると、
クリーンアーキテクチャを避けては通れない認識

端的に、局所的な説明としては、

DTOとは、
クライアントからのリクエストで送られてくるリクエストパラメーターの値を受け取れる容器であり、クライアントへのレスポンスの際に、テンプレートエンジンで良い感じで、テンプレートに値を割り当て設定してくれる容器 (インターフェースで活躍)
Entityとは、
アプリケーションのインフラでDB連携する際にテーブルの仕様をアプリケーション内で引き継いで、内部処理で使用できるようにする為の容器

DTOとEntityの変換も行われる場合がある

Springにおいては、
@RequestParamを用いた場合のリクエストパラメーターのやり取りの仕方があるけれど、テンプレート上の個別の項目とかだったらこれで十分
formタグ<form>を使う時には、送受信する値の各項目に適用するformのコントローラー(テキストボックスやチェックボックスなどのフォーム部品)を使用するが、基本的にデータが一塊になっている

DTOを用いると、このformで生成したデータの塊を一括で処理でき、Springがバックグラウンドで処理を行ってくれて、一塊のデータの各項目の値についてクライアント側とサーバー側でやり取りするものを自動で適用してくれる

また、DTOの構造とEntityの構造が、クライアント側とDBとを連携する兼ね合いで、ほとんど同じ場合、DTOとEntityの変換も行われる

DTOを用いる時にはControllerのハンドラメソッドの引数で@ModelAttributeを付けると、レスポンスの際に、レスポンスを作成する段階での値を保持したものをSpringがModelに自動で格納してくれる
※SomeFormClassというDTOなら、someFormClassとしてModelの属性として格納される
@ModelAttributeを付けずに引数にDTOを受け取る例も見られ、レスポンスにDTOのデータを引き継がせる必要が無い場合に、このケースが挙げられる
@ModelAttributeを書かなくても、DTOがハンドラメソッドの引数に入っている場合、@ModelAttributeと見做され、Modelに自動格納されるとのこと

感想

Reactの勉強をしていて、Springに喩えると分かりやすい場合があった
DTOについては、まだReactの勉強では出てきていないので、詳細未履修の現段階の見立てとしてNext.jsが出てきた頃位に、Springで培ったDTOの実践的な見識が効力を発揮するのではないかと思っている
尚、これまでの経験で、実務的なReactでのアプリケーション開発で、DTOとEntityを扱った経験が既にある

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?