最近何度かクライアントサイドMVCフレームワークであるところの、Backbone.jsを使ってコードをかいたりしていたので、その時に感じたことをまとめて Kyoto.js で話してみました。
Backbone.jsではMVCの各層をつなげるために、Backbone.Eventsというオブジェクトが用意されています。Backbone.jsのModelとViewのインタラクションは、ベースになっているBackbone.EventsによるObserverパターンによって実現されています。実際にBackbone.jsでコードを書いてみると、便利な機能はいろいろあるもののBackbone.Eventsの存在がMVCを実現するのに重要であることがわかります。
そこつきつめると、Backbone.EventsのようなObserverパターンを簡単に実現できるようなライブラリがあれば、クライアントサイドMVCを実現するには十分で、必要以上にライブラリに依存することを避けれるのではないかと考えてみたりしています。
ただHTMLをViewとしている以上、実際に表示したいものをViewに反映するにはどうしてもDOM操作が必要になります。これは、既存のMVCパターンでは取り扱っていななかったWebアプリケーション固有の性質です。Angular.jsやKnockout.jsはUIバインディングなどでDOM操作を隠蔽してこのへんを取り扱おうとしようとしているみたいです。
クライアントサイドMVCをJavaScriptの設計に採用するのは、コードが整理されてよさそうですが、大きすぎるフレームワークへの依存は保守性を悪化させます。クライアントサイドMVCに要求される最低限の要素だけを自分なりに実装して使っていくのが良いんですかね。
おまけ
3つの方法で、しょぼいTODOソフトのぬけがらみたいなものを作ってみました