Angular と CRUD の相性は悪いのか?

イシュー

  • Jsonオブジェクトの状態に応じて、Listの内容が更新されるような AngularJS モジュールを探してはいるものの、なかなか見つからない。
  • もしかして AngularとCRUDは相性が悪いのか?

Angularのいいところ

  • Angular を使っていて、特徴といっていいほど素晴らしいのは、DOM(HTML)とデータ(JSON)の分離である。
    • jQueryでは、html+jsをDOM(sizzleエンジン)とメソッドに分離したが、Angularではさらにデータも分離した)
  • 基本的に、Angularでは、DOMの位置情報をController側では必要としない。
  • DOMは、HTMLとして既に記載されている。
  • データの出力位置も DOMの中に記載されている。
  • なので、Controllerでは、DOMの位置をまったく気にしないで、Data(主に $scope)だけを好きなように操作すればいい。

CRUDで実現したいこと

  • CRUDで行ないたいのは、データのリスト、登録、編集、削除である。
  • これはコントローラで行なう内容であり、DOMはあくまでViewである。
  • 仮にngCRUDなるものがあるとして(実際に探したらあったが)、Angularで描画すべきデータは、DOMに記載しておく必要がある。
  • このbindされるデータ位置をDOMに記載しておくという点をもって、削除はどうするのか?新規はどうするのか?といったことの対応が難しい。
    • (おそらく Angularの思想だと、データドリブンなので、データが消えたら、DOM(画面)上のデータも消える、データが作られたら、DOM上のデータが表示されるといった使い方が好ましい)
  • 仮にカラムのようなデータではなく、カラムを含むオブジェクトとしたところで、DOM上での新規、とか、削除の表現を DOMで表現することは出来ず、あくまでコントローラ側で行った変更の反映となってしまう。
  • モデルのDDLをAngularで定義することは可能。でもそれはAngularのローカルルールでは使えない、仕様として公開される必要がある。その一つの選択肢として、ember-data で定義されているjson構造というのはありだと思う。

イベントドリブンとデータドリブン

  • CRUDで求められているのは「イベントドリブン」な挙動であり、Angularで求められているのは「データドリブン」な挙動であるため、求められているものが違う認識

参考