エンティティとDTO
ひがさんのblogを参考に、DTOにエンティティを継承させて直接DBとやり取りするという手法をしばらく使っていました。エンティティとDTOの相互変換コストが発生しないのがメリットです。
初めのうちは問題が無かったのですが、システムの仕様が複雑化するにつれて、この手法では限界が出てきました。
- 継承元エンティティの持つプロパティが、プレゼンテーション層に公開したくないものも含めて全部見えてしまう。
- 複数のエンティティにまたがる操作を行う画面のDTOを作成するとき、DTOにどのエンティティを継承させるべきか分からない。
そこで、思い切って全てのDTOをエンティティから切り離し、相互変換はリフレクションで解決するようにしてみました(エンティティとDTO間で、同名のプロパティがあればコピーする)。
この方法はそこそこ上手く機能していますが、一方のプロパティ名を変更したとき、もう一方も忘れずに変更する必要があり、脆さも感じています。