@kyanny's blog

My thoughts, my life. Views/opinions are my own.

todos.js を読んだ (Backbone.js のデモアプリ)

JSリーディング*1で Backbone.js を何回か読むことになってとっかかりとしてそれを使って書かれたものを先に読むことにしてこれがお題だったので読んだ。以下 ActiveRecordRuby のアレを指す。

  • Model は ActiveRecord っぽくて読みやすかった。
  • Collection にデータソース (localStorage) を書くことについての見解。 Backbone.Model == Model < ActiveRecord::Base のインスタンス == リレーショナルデータベースにおけるレコード。 Backbone.Collection == Model < ActiveRecord::Base のクラス == リレーショナルデータベースにおけるテーブル。 ActiveRecord::Base.establish_connection はクラスメソッド(レコードではなくテーブルを対象とする操作だから)だと思えば Collection で宣言するのは自然と思える。
  • comparator (発音しづらい) は Java 由来の名前みたいだけど Rubyist 的には sort_by がよかった。あと例がはまりすぎててちょっと疑いたくなる。まぁ sort_by 便利なのでこれも便利なのでしょう。
  • Backbone.View の events: の key はどうしてこうなった。 "click .check" みたいなの。空白含む CSS セレクタ書けないのでは??(まぁどうせもっと汎用的な書き方があってこれは DSL なんだろうけど) jQuery も同じような感じらしいけど文字列を空白区切りでよしなに解釈とかは気持ち悪い。あとコールバック関数名が文字列なのも気持ち悪い。と言ったら博学な Rubyist (でも仕事では PHP ばかり書いている) に「function そのものを渡しちゃうと this の参照が切れてしまうから仕方ないのでは」と突っ込まれた。深く検証してないけど当たりな気がする。
  • いっぽう initialize はよかった。名前が気に入っただけ説。でも this.model.bind('change', this.render, this) はわかりやすい。 this 多めだけど読めば意図はわかるのでいいコードだと思う。
  • AppView はなんで Backbone.View からもう一個作ってんだろと朝の通勤電車内で寝ぼけた頭で読んでたらわかんなかったけどコメント読んだら違う部品をつくってるんだと理解した。 Model のインスタンス一個につき結びつく View が一個あって部品として完成するっていうのはわかりやすい気がする。あと createOnEnter とか showTooltip とか、だんだんユーザーが直接触れる UI に近い層になるにつれて関数名が具体性を帯びてくるというか抽象度が高くなっていくあたりはけっこう震えた。これは設計の力量が問われるけどかなり粒度を意識したいいコードが書ける気がする。 GUI アプリケーションとかこういう感じなのかな。 Model とかレイヤ低い層にいくほど粒が細かくなって関数名も短く単機能になる感じ。
  • annotation つきコードを頭から読むだけでなんとなく理解できたけどやっぱり実物さわって動かしたほうがイメージしやすい。というかコードと挙動が結びつかないので何やってるかわかんなくなる感じ。なので動くコードが大事というのはこういう意味なのかもなんてことも思った。