« 出版システムや文書共有システムを作った事例 | トップページ | astahGSNのメモ »

2014/07/06

MVC2モデルとMVCモデルの違い

MVC2モデルとMVCモデルの違いについて、良い記事があったのでリンクしておく。

【元ネタ】
MVCをWebに適用した「MVCモデル2」 : Java好き

MVCモデルのバリエーション: プログラマの思索

(引用開始)
「MVC」と「モデル2」の違いが、「モデル」の設計に影響を与える

違いは、「モデル」が「ビュー」に状態が変わったことを通知することがWebの性質上なくなった点。

サーバー側からいきなり「モデル」の状態変更が通知されることは
HTTPではできないので、必然的にそうなる。

大したことのない変化に思えるが、これにともない「モデル」の構成が「MVC」と大きく変わる。

「モデル」が状態が変わったことを通知することができないことは、
毎回最新の状態のモデルを作ることにつながる。
「MVC」では前状態を保持しつつ状態変化に対応させるといった「モデル」の使い回しが可能だった。
しかし、「モデル2」では毎回最新の状態のモデルを作るので使い捨てになる。

この「使い回し」か「使い捨て」にするかにより、
モデルを構成する状態やメソッドの設計については大きく異なってくる。

「使い捨て」でよいので、「モデル2」ではDBから取ってきた値を保持するだけのオブジェクトが
必然的に増える傾向にあります。
(引用終了)

MVCモデルは、元来、Smalltalkでデスクトップアプリを設計する時の手法として生まれた。
モデルとビューを分離するだけでなく、モデルの状態の変更をビューに通知する仕組みも必要。
これがObserverパターンになる。

MVC2モデルは、Webアプリの設計において、データとUIを分離する時に、MVCモデルを参考にした設計手法。
Webアプリは基本はステートレスだから、モデルの変更をビューに通知する必要がない。
つまり、セッション接続中のみ、モデルは状態を保持すればよく、それ以外はモデルは状態を破棄して良い。

すると、Webアプリのモデルは、使い捨てになりやすいので、DBから取得した値を保持するだけの「値オブジェクト」がすごく多くなる。
DTO(Data Transfer Object)などがその典型例だろう。

ドメイン駆動設計」では「エンティティ」と「値オブジェクト」を区別する。
Webアプリでは、エンティティはRDBに格納されたデータと同一だ。
RDBのデータは、ただ一つの識別子で保持される。

だが、Webアプリのトランザクション処理の中では、値オブジェクトを使って、データをこねくり回す処理がほとんどだ。
エンティティから取得した値は、値オブジェクトとして使われるからだ。
DTOもそうだし、一時的に使われるリストやハッシュ、変数も値オブジェクトと見なしてもいいかもしれない。

MVC2モデルとMVCモデルはとてもよく似ているけれど、その違いは意識しておくべき。

|

« 出版システムや文書共有システムを作った事例 | トップページ | astahGSNのメモ »

モデリング」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« 出版システムや文書共有システムを作った事例 | トップページ | astahGSNのメモ »