【MVC】ユーザの入力を受け付けるのは断じてControllerではない。Viewだ。

MVCについて (1) | ぶろゲ

MVCとはなんぞや

オレオレMVCがありすぎてだるい。自分の理解を整理する意味でもMVCのポイントはなにか、書く。

GUIアプリケーションを作る場合、ユーザの入力を受け取るのは間違いなく View である。

Wikiを読むとControllerが入力を受け付けるように読めて、そう解説してあるブログも腐るほどあるがそれがかなり理解を歪めている気がする。

「Viewが発火したeventをハンドリングするのがController」という意味で、入力に対する制御を行うのはControllerだがあくまでユーザの入力を受けとるのはViewである。多分。これをごっちゃにしている人がとても多いようにみえる。

ここさえ間違えなければ、後は難しくない。Modelに依存するView、ModelとViewをCompositeするController、誰にも依存しない要のModelというだけ。

解けない疑問:

  • 階層構造になったViewにおいて、子Viewが発火するeventをControllerまで伝播させるのか(だるくね?)
  • 一つのModelインスタンス複数のControllerで共有したい場合、安易にSingletonに頼っていいのか。
  • Modelが発火するchange eventは直でViewが監視すべきか。(主にデータバインド用)
  • あるいはControllerを介してViewの更新メソッドを叩くべきか。(ケース・バイ・ケースとか言われそうだけど)