ORMの対象領域で有名なインピーダンスミスマッチだけど、
Webアプリケーションの場合、StrutsやServlet&JSPなんかを使うと
ViewとModel層にもインピーダンスミスマッチが発生してしまうのではないだろうか?
O-Rのインピーダンスミスマッチは、モデリングの方法論の違いから生まれている。
O/R | モデリング手法 |
---|---|
ドメインオブジェクト | オブジェクトモデリング |
RDB | データモデリングおよび正規化 |
他方で、ViewとModelでもやはりモデリング(と言うより設計)手法が違っているではないか。
V/M | 設計手法 |
---|---|
フォームデータ | 画面設計 |
ドメインオブジェクト | オブジェクトモデリング |
ViewからModelを呼び出すときには、リクエストパラメータのデータはモデルに渡してやらにゃいかん。
しかし、さすがにActionFormなどという、Viewテクノロジーに依存しまくったオブジェクトを、そのままModelに渡してしまうことはさけたい。
しかし、ビジネスロジックインターフェイスで疎結合にされたModel層には、コンストラクタはない。
また、プロパティーへのアクセッサも面倒なのでつくらない場合が多い。
そこで何が起こるかと言うとDTOへの詰め替えが発生する。
DTOはオブジェクト指向を破壊する第一歩だ。
振る舞いとデータの分離を促進するので。
と、そうやってオブジェクト指向開発の土台は崩れていくのだなぁ。
Webアプリやってると、どうもオブジェクト指向にならないのは(他にも原因があるが)
View/Modelインピーダンスミスマッチも原因のひとつだろう。