エンティティとDTO

ひがさんのblogを参考に、DTOにエンティティを継承させて直接DBとやり取りするという手法をしばらく使っていました。エンティティとDTOの相互変換コストが発生しないのがメリットです。

初めのうちは問題が無かったのですが、システムの仕様が複雑化するにつれて、この手法では限界が出てきました。

  1. 継承元エンティティの持つプロパティが、プレゼンテーション層に公開したくないものも含めて全部見えてしまう。
  2. 複数のエンティティにまたがる操作を行う画面のDTOを作成するとき、DTOにどのエンティティを継承させるべきか分からない。

そこで、思い切って全てのDTOをエンティティから切り離し、相互変換はリフレクションで解決するようにしてみました(エンティティとDTO間で、同名のプロパティがあればコピーする)。
この方法はそこそこ上手く機能していますが、一方のプロパティ名を変更したとき、もう一方も忘れずに変更する必要があり、脆さも感じています。