Stocks and Flows

やったこと、考えたことの記録

AngularJSを採用することのメリット

自分の理解をまとめただけだが、おおよそこういうことになるのかなと。

1. いい感じにMVCが書けて、全体のコード量が減らせる

そもそも自分は「フロントエンドでもMVCなんてことがあるのか」とか思ってしまうほど理解が浅かったのだが、考えてみれば仮にJavaScriptであろうと「データを用意して、それをなんやかんやしてテンプレートに反映したり、テンプレートから情報を受け取る」というアプリケーションである以上は、MVCであって然るべきだ、確かに。

他のJavaScriptフレームワークに対する知識がほとんどないので、比較することができないが、機能ごとにコントローラを生成して、コントローラに対して必要なコンポーネントを渡す、というのはいい感じにMVCを実現しやすいと思う。

そして、テンプレートに記載するのは ng-modelとかng-viewみたいなディレクティブと呼ばれるものだけで、とてもシンプル。jQuery みたいにid="hogehoge"をつけまくってそれを動かす、ということをする必要がない。

2. 動的なアプリケーションをシンプルに作れる

これは1. につながっている部分なのだと思うが、AngualrJSでは2way Data Bindingというスタイルをとっており、モデルの変更は即時的にテンプレートに反映され、逆もまた即時で反映される。

それによってアニメーションやインクリメンタル検索といった動的なUIを実装することが異常なほど簡単である(というかデフォルトでそうなってると言っていい)。

要するに$('#divElement').on('change', function() { ... }); といった状態をWatchするコードを書く必要が劇的に減るということだ。

3. テストしやすい

これは他のMVCフレームワークと同じであるが、機能が分割されているということは「テストしやすい」ということに直結する。 モデルはモデルで各メソッドの振る舞いをテストできるし、コントローラもそう。

開発をリードしているのがGoogleというだけあってそこらへんはデフォルトでのツールも一通り揃っている印象を受ける。モデル側のUnitTestはKarma、コントローラ側はProtractorが推奨ツールなのだろうか(この辺ちゃんと把握してない)。

他にもAngularJSにはDependency Injectionとかその他諸々の概念があるので、調べつつ自分の理解をまとめていきたい。