👯

DDDでのDTOの使い所

2023/05/25に公開

概要

DDD関連の記事や書物を読む中で、 「DTO」が出てくることがちょくちょくありました。
なので、DDDとDTOの関連性を簡単にまとめてみようと思います。

いつDTOを使う?

➡️ユースケース層からプレゼンテーション層へ返す際にDTOに詰め替えて返す時

詰め替えて返すと良いことあるの?

ドメインオブジェクトに、プレゼンテーション層に関連する処理が混入するのを防ぐため。

エンティティが持つメソッドを、プレゼンテーション層で使えてしまうことを防ぐため。

また、DTOをかませることで、ドメイン層の修正の影響をプレゼンテーション層が直接受けなくなる。

どこにDTOを置くべき?

各ユースケースごとに置くのが好ましい。
DTOとユースケースの関係性が追いやすくなるため。

サンプルフォルダ構造は下記。

- Usecase
	- User
		- UesrUsecase
		- UesrUsecaseDto
	- Item
		- ItemUsecase
		- ItemUsecaseDto

他の場面でもDTOでの詰め替えはしてもよいのか?

よい。
ユースケース層からプレゼンテーション層に値を返す時に限った話ではない。

プレゼンテーション層、ドメイン層、ユースケース層、インフラストラクチャ層、それぞれをまたぐ時にDTOに詰め替えて渡してもよい。
しかし、やりすぎは無論コストもかかるので注意。

もちろん必ずしもレイヤーをまたがる際に、詰め替える必要はない。
そのままの形で渡す方針もあれば、DTOなどにデータを積み替えるパターンもあるのでプロジェクトによるといった所でしょうか。

参照

https://core-tech.jp/blog/tech_log/4106/

https://kabochapo.hateblo.jp/entry/2019/11/21/160759

https://little-hands.hatenablog.com/entry/2021/09/27/multicursor

https://www.seplus.jp/dokushuzemi/blog/2022/06/get_started_ddd_patterns.html

Discussion