MMVC

[id:lethevert:20050905:p5] - SmalltalkMVC
[id:lethevert:20050913:p4] - MMVC
[id:lethevert:20050914:p1] - ドメインモデル貧血症

      • -

気のせいか、僕が、MMVCを見つけてリンクを張ってから、他のブログでもMMVCについてコメントしている記事を見かけたりしたので、こいつについてもうちょっと考えてみようかなと思います。
というのはですね、オブジェクト指向的なプログラミングを行う上で、MVCという考え方は基礎中の基礎のなのではないかと思うのです。デザインパターンなんて知らなくても、MVCは知らないとオブジェクト指向のデザインなんてできないでしょ、と思うのですね。しかも、今後、言語がどのように変化していったとしても、MVCは基本でありつづけるのではないかと思うのです。

モデル

モデルはアプリケーションの中心部分です。モデルとデータソース(データベースやファイルシステムなど)の間には、データソース層(O/Rマッピングやファイル読み込みなど)が存在します。また、その反対側には、ビューやコントローラーに対するインターフェースを提供するために、アプリケーションモデル層(サービス層)が存在します。
モデル内部の階層構造 - http://martinfowler.com/eaaCatalog/serviceLayer.html(ここでは、同心円状に描かれていますが、これはこの絵がユーザーの視点から描かれているためです)
ドメインモデル層がモデルの中心です。この部分は、解決したい問題に対するロジックやアルゴリズムやデータ操作などが定義されています。

ビュー

モデルをユーザーが理解できる形に表示(視覚以外の表現でも同様だが)する部分がビューです。
ビューはモデルがどのようであるかには興味がなく理解もしません。ビューは、ただモデルを表示するだけです。ビューは、モデルを表示するために必要な情報をモデルに尋ねるだけで、それ以外の働きかけをモデルに対して行うことはありません。
ビューはモデルに依存していて、モデルが更新されたときには、モデルからビューに対して更新メッセージが送信され、ビューはモデルを再描画します。

コントローラー

http://c2.com/cgi/wiki?WhatsaControllerAnyway
ユーザーが起こした操作(キーボード入力やマウス操作など)は、コントローラーが受け取ります。コントローラーは、その操作を解釈して、必要なものだけを取り出して、モデルに操作が行われたことを伝えます。(モデルは、そのメッセージによって、モデルで定義された処理を実行し、それによってモデルが変更された場合には、更新メッセージをビューに送信することになります)
なお、Javaのswingでは、コントローラーは独立しておらず、ビューと同じオブジェクトとなっているようです。