GUIアプリケーションとWEBアプリケーションによるMVCの違い

MVCとは、Model-View-Controllerパターンの略称で、何か知らのロジックを担当するModel、表示出力を担当するViewと、入力を担当するControllerの3つの役割でコンポーネントを分けることで、アプリケーションの構造をシンプルにし、保守性を向上させようというすばらしい考え方である。

GUIアプリケーションで利用される場合は、実際にはViewとControllerを明示的に分離することは難しく、M-VCモデルと表現されることもある。例えばWindows Formsを使う場合、Viewがフォーム(Form)で、Controllerがコントロール(ButtonやTextBox)にマッピングされるが、フォームにペタペタとコントロールを貼り付けて、入力にあわせてイベントハンドラを仕込むような実装になるので、はっきりいって「ViewとControllerを明示的に分けるとするとどこで分けてよいかわからない」というのが小生の考えである。実際にSmalltalkでもViewとControllerは分けられていなかったらしい。

WEBアプリケーションの場合は、いわゆる、J2EE(今はJava EE)のMVC Model2で、View=JSP, Controller=Servlet, Model=JavaBeanにマッピングさせてWebアプリケーションを実現するあれである。最近は、さすがにServletをベタに実装せず、何かしらのフレームワークを利用することが圧倒的に多いと思う。(まだstrutsデファクトスタンダードなのかな?)

WEBアプリケーションは、HTTPに依存するがゆえに、HTTPリクエストを処理するControllerと、HTMLを出力するViewを自然と分離しやすくなっているため、GUIアプリケーションから生まれたMVCパターンだが、実はWEBアプリケーションにぴったりマッチする。