Backbone.jsのMVCについて

この記事は、Backbone.js Advent Calendar 2012の4日目の担当です。

静岡のjavaScrpt勉強会で発表し、その時にご指摘頂いたことを良い機会なので記事にすることにしました。

ちなみにBackbone.jsは興味本位で多少調べて入門として発表した程度で、業務での実績は皆無です。その点は予めご了承ください。

まず、Backbone.jsを勉強していて、MVCパターンについて酷い誤解をしていることがありました。

WEB系のプログラムの仕事をしていてMVCパターンと聞いて、真っ先に浮かぶことは Ruby on RailsやCakePHPなどの割りと人気のあるサーバーサイド言語のWEBアプリケーション・フレームワークだと思いますが、これを基準としてBackbone.jsのMVCを比較してしまいました。

下記は自分が勉強会の資料で発表したものです。

Backbone.jsのAPIグループを確認

 

Backbone.jsとの比較での勘違い

 

これを発表した際に、@ishisakaさんに間違いをご指摘いただきました。

まず自分は、MVCパターンはStruts辺りのWEBアプリケーション・フレームワークが元祖だと勝手に思い込んでいたのですが、Wikipediaを見ると下記のように紹介されています。

元来Smalltalkにおけるウィンドウプログラム開発のための設計指針として生まれたものであるが、特に構造が複雑となりがちなグラフィカルユーザインターフェース (GUI) をもつソフトウェアにおける有用性から他方面へ広がった。

Model View Controller – Wikipedia

このSmalltalkについて詳しく知らないので何とも言えないのですが、ウインドウプログラム開発、GUIと書いてあることからデスクトップ・アプリケーションか、それに近いものと推察され、こちらがMVCパターンの元祖のようです。
また、Wikipediaのページに下記のような図でMVCの関係図が説明されています。

WikiPediaのMVC図

 

この図がMVCパターンを正しく理解するために重要で、直線と破線について次のように説明されています。

直線は直接的なAssociationを表し、破線は (例えば)Observer パターンを経た間接的なAssociationを表す。

ここでポイントになるのが下記2点だと思います。

  • ViewからModelに対して、直線が繋がれていること。
  • ModelからViewに、ViewからControllerに破線が繋がれていること。
  • 破線の流れをイベント処理と捉えると、確かにBackbone.jsの入門サンプルであるTODOはそのような動きをしていたかと思います。また、Viewからイベントを介して直接Modelを編集する動きに違和感を感じて、Veiwに含まれているEventこそがControllerではないかと誤った思い込みをしてしまいましたが、本来のMVCパターンにおいては全く問題は無く、むしろBackbone.jsのMVCの方がより本来のMVCに忠実ではないかと思ってしまうほどです。というか、そもそもGUIのために生み出されたパターンなので、フロントエンドのBackbone.jsの方が性質がGUIに近く、当たり前とも言えますね…。

    かと言って、StrutsやRails、CakePHPなどのWEBアプリケーション・フレームワークのMVCがおかしいのかというと、そういう話でもなく、「サーバサイド言語でMVC構築しようと思ったら、ああなってしまうよね。」といった話を勉強会終了後に地元のエンジニアさん達と話をしたりしました。

    これからBackbone.jsを勉強しようとしている方にも、Samlltalkは知らないけど、RailsやCakePHPのようなフレームワークの経験はあるといった方が少なくないと思いますので、予め知っておくとより勉強がスムーズになるのでは無いかと思います。


    WEBデザイナーさん向けjQuery入門

    以前、静岡javaScript勉強会で使用したKeynote資料をslideshareしてみました。slideshare良いですね。Keynoteをそのままアップロードできました。

    Amazon Web Services勉強会 at 静岡

    第1回 JAWS-UG静岡 勉強会に参加してきましたので、内容についての簡単なまとめです。

    Toggeterでのまとめはこちら

    Amazon EC2のアカウント作成からWordpressインストールまで

    • 実際に触りながら、Wordpressのインストールまで行いました。
    • EC2上の動作は非常に軽快で、Apache,PHPのインストールの速さに驚きました。
    • ハンズオン重要!次回、勉強会を自分で開催する際には取り入れてみたい。

    AWSを業務で使うために上司を説得する方法

    • 上司が説得出来なかったら切腹!どうしてもAWSを使わせてくれないなら、静岡を脱藩なう!
    • サーバーワークスさんは、AWSいじりしたいエンジニアを新卒も含め、スタッフを絶賛募集中だそうです。

    科学カイロ

    ZIPPO(ジッポー) ハンディウォーマー フリース付 繰り返し使える化学カイロ

    ZIPPO(ジッポー) ハンディウォーマー フリース付 繰り返し使える化学カイロ

      <div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">
        posted with <a href="http://www.amazlet.com/browse/ASIN/B000XIHZKW/studiokingdom-22/ref=nosim/" title="ZIPPO(ジッポー) ハンディウォーマー フリース付 繰り返し使える化学カイロ" target="_blank">amazlet</a> at 11.11.28
      </div>
    </div>
    
    <div class="amazlet-detail">
      ZIPPO(ジッポー) (2008-09-24)<br />売り上げランキング: 706
    </div>
    
    <div class="amazlet-sub-info" style="float: left;">
      <div class="amazlet-link" style="margin-top: 5px">
        <a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000XIHZKW/studiokingdom-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a>
      </div>
    </div>
    

    • 55jさんが持っていた物に、懇談会で自分が個人的に食いついたアイテム。
    • 実物はとってもオシャレです。詳細はこちら
    • 寒いサーバルームで作業するエンジニアさんや冬登山する人にオススメ。

    懇談会にて伺った興味深いお話

    • クラウドエンジニアはバイク好きが多い?
    • 横の繋がりが結構あって、Amazonさんと他国産サーバ屋さんで集まってお互いの製品、サービスを罵り合ったりしてるとかしてないとか。
    • 地方だとクラウドする程の案件が無いと言われるかもしれないが、過去10年を振り返ればコストの問題でボツになった企画があるはず。実際にそうして堀起こしてクラウドによって実現したサービスがある。

    講師の皆様、参加者の皆様、支部長の#A様及びスタッフの皆様本当にお疲れ様でした。次回もよろしくお願い致します。