DTOの種類

各層でやりとりするDTOにも種類がある。

  • 引数として渡すDTO
    • 画面の項目を持ったDTO。strtusで言えばActionForm。
  • 戻り値として渡されるDTO
    • 処理の結果を持ったDTO。selectの結果とか。
  • 画面間で引き継がれるDTO
    • 画面間で引き継ぐ情報を持ったDTO。ワークフロー的なDTO

っで、いつも思うんだけど、このDTOの扱いって結構煩雑になりがちなんだよね。データアクセス層で生成されたエンティティをプレゼンテーション層にそのまま戻してしまうと、プレゼンテーション層がDTOを介してデータアクセス層に依存してしまう。なので、業務ロジック層でしかるべきDTOに詰め直さないといけない。それはまた逆も然りで、これがまためんどくさかったりする(もちろんBeanUtils#copyPropertiesを使えば簡単にできるけど)。
ここらへん、何か明確な扱い方があればすっきりするんだけどなぁ。

後、画面間で引き継ぐDTOは、きちんと定義していないと各画面でいろんなDTOが出来上がってしまう。ここは内部設計で定義できると思うので、何か定義書がいるかも。もしくはシーケンス図にコメントで書いておこうかと思う。