ひがやすを技術ブログ

電通国際情報サービスのプログラマ

プレゼンテーション層のモデルとリッチなドメインオブジェクト

http://d.hatena.ne.jp/higayasuo/20041207#1102379088でも書いたのですが、私は、プレゼンテーション層に、ドメインオブジェクトの複雑な構造をみせるのは良くないと思っています。プレゼンテーション層は、プレゼンテーションに徹し、ドメインの知識は持つべきではないと思うからです。
また、多くの場合、プレゼンテーション層のモデルとドメインモデルには、ギャップがあります。例えば、コードと名称を汎用コードテーブルで管理しているとしましょう。ドメインモデルに汎用コードテーブルへの関連を持たすのは、違和感がないでしょうか。
パフォーマンスの観点から考えても、3つくらい関連をたどった先のオブジェクトのたった1つのプロパティの値を参照するために、関連先のテーブルにすべてアクセスするのも、パフォーマンス的に避けたい処理です。
lazy-loadingを使ってキャッシュする?キャッシュをするにしても一度はアクセスしなければならないことは変わりません。また、lazy-loadingを使うとJSPのタグから呼び出されるメソッドが実は、SQL文を発行するなんてことも起こる可能性があります。
プレゼンテーション層のしかもViewの部分でエラーが起きる可能性は極力避けなければいけません。また、プレゼンテーション層でSQL文が発行されるという状態は、層による役割分離という点でも望ましくありません。
こう考えていくと、プレゼンテーション層のモデルは、ドメインオブジェクトとは別に構築すべきだということが分かってもらえるのではないでしょうか。
そのときに使われるパターンがViewHelperです。DTOを使うことも出来ます。
2chとのやりとりは、正直ブルーだったけど、44氏にありがとうといわれて、うれしかったです。これからも、よろしくお願いします。