本記事のナラティブ
なんとなく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を扱った経験が既にある
