JavaScriptでのMVC

これも、埋もれていた記事 …

おもしろそうなので、「ここが大変だよJavaScriptフレームワーク入門 デザイナーのためのWeb勉強帳(3) – @IT」という記事を読みました。ちょっと気になったところがありました。

例えば、オープンソースで提供されているJavaScriptフレームワークのほとんどには、サーバサイドのMVCでいうところのコントローラーが存在しません。
これは、JavaScriptの動くタイミングがユーザーからのリクエストを受け取った後ではなく、サーバサイドからのレスポンスを受け取った後であるからという理由にあります

 タイミングが理由だというのには違和感を感じます。これは、ブラウザに組み込まれたJavaScriptエンジンが提供するコントローラ機能をそのまま使っているため、JavaScriptのフレームワークでは、コントローラ機能を実装する必要がないということなのではないでしょうか。

 ブラウザに組み込まれたJavaScriptエンジンは、ブラウザから渡ってくるイベントを受け取り、ハンドリングしています。あるボタンにonClickが指定されていてfという関数が結びつけられていたら、そのボタンがクリックされたときにfを呼び出すという処理は、JavaScriptエンジンが実行しているはずです。

 理論的には、たとえばすべてのボタンのonClickに同じbtnClickedEventHandler関数を結びつけて、その中でクリックされたボタンに応じて呼び出す処理を振り分けるといったことで、コントローラを実装することは可能なのですが、もともと提供されている機能を使った方がわかりやすいし、全体のコード量も少なくできるし、性能も出るので、フレームワークで独自のコントローラを実装しないのでしょう。

 などと考えていたのですが、Servletとかの場合はTomcatのようなServletコンテナ上で動くという前提があり、Strutsなどは「Servletの作法にのっとった上で、MVCのプログラムを作りやすくなっている」というフレームワークです。JavaScriptのコンテナはJavaScriptエンジンつきのWebブラウザとなるわけですが、それを前提にしたフレームワークというのは、どういうものをいうのか、ちょっと難しい気がしてきました。jQueryなどは単なるJavaScriptライブラリと認識していたので、フレームワークといわれること自体に違和感を覚えているのかもしれません。

 RoRやStrutsは、MVCモデルにのっとったプログラムを開発しやすい、ということを売りにしているわけですが、jQueryなどはMVCモデルにのっとったJavaScriptプログラムを開発しやすい、というわけではない、という点が気になるわけです。jQueryを使うとJavaScriptプログラムを開発しやすい、は正しいのでしょうが、「MVCモデルにのっとったJavaScriptプログラム」を開発しやすくすることを目的として使うことはできるのでしょうか。具体例を考えて検討してみないといけなさそうです。

 もやもやとした感じで、気になります。

同じタグの記事: JavaScript
同じタグの記事: MVC
同じカテゴリの記事: Program
関連書籍: JavaScript