Entries

スポンサーサイト

カテゴリ:スポンサー広告
更新日:--------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

バックボーンでオブザーバーパターンやってるとオブジェクト指向!って気がするね

カテゴリ:コンピューター
更新日:2013-07-18
backbone.js は、Events を使って、オブザーバーパターンを使うのが基本。初期の解説を見て bind で書いてたんだけど、メモリリークがあるとかでボチボチと listenTo に書き直し中。

で、気づいたのは、ViewにもlistenToあるじゃんね?もともとEventsをMixinすりゃ使えるわけで、そりゃそうか。

ModelとViewの連携サンプルばかり見てたせいか、View間はオブジェクト参照だったんだよね。例えば、一覧表示で、テーブル全体を一つのViewにして、各行を個別のViewにする場合、テーブルViewで「全部の行に対しての処理(例えば、チェックを入れるとか?)」をクリックしたら、各行Viewのメソッドを呼びたい。この時、行Viewのオブジェクトを保存してたんだよね。

なんかカッコ悪いなぁ、と思ってた。ViewでlistenToが使えるなら、オブザーバーパターンで書けるじゃんね。でも、どうやって?

逆は分かるんだ。行Viewを作った時に、イベントをテーブルViewでlistenToしておけばいい。

var view = new Backbone.View();
this.listenTo(view, 'event', this.change);


でも、テーブルViewのイベントを行ViewにlistenToさせるには?もう分かってこの記事を書いてるから、答えは明白なんだけど。なんでか、どう書けばいいのか分からなかったのだよね。

これもModelとViewの連携サンプルの影響かなぁ。initializeでのbindばかり見てたから、this.listenToという構文だと思い込んでいたみたい。「Backbone.jsガイドブック」でメディエーターパターンを見てた時に、やっと気がついた。viewにlistenToさせるだけじゃん。

var view = new Backbone.View();
view.listenTo(this, 'event', view.change);


書きなおしてみると、各関数のコード量が少なくなって、スッキリしたような。

> オブジェクト指向できていますか?

これを見た時、できてないなぁ、と思ったんだよね。なんか、クラスもメソッドも大きい。だけど、小さくしようと思っても、よくわからない。

ひとつは、Delphiを使ってきてた、というのがあったかなぁ、と思う。フォームにボタンなどのコンポーネントを貼り付けて作るのは便利なんだけど、フォームは1つのクラスだから、どうしても大きくなってしまう。プロジェクト専用のコンポーネントを作って登録すると後々管理が面倒。動的生成だと配置が面倒。複数のコンポーネントを1つのクラスとして独立させるというのが、なんかうまくできなかったのだよね。

データベースを使ったシステムって、Viewの操作とDBの操作がほとんどなんだよね。中間のアプリケーション層でビジネスロジックとか言うけど、実際は値の受け渡しがほとんどでロジックらしいロジックなんかない。だから、Viewが部品化(クラス分割)できないと、小さくしようがないんだけど、これが難しかった。

最初は、扱いがよくわからなかったから、renderでガリガリ書いてたんだけど、コツが分かってきたので、だんだんとViewを細かく分けてくようにもしている。おかげで、今までやりにくかったViewの部品化ができるようになってきて、ようやっと私もオブジェクト指向になってきたかなぁ、とか思う。

> 私の頭は、どうやらオブジェクト指向じゃないらしい - fintopo
> ユーザーインタフェース指向で開発できる仕組みが欲しい - fintopo

あと、オブザーバーパターンで書いてると、なんかオブジェクト指向!って感じがするのがいいね。

いや、オブジェクト指向が出てきた頃、本にはオブジェクト間でメッセージをやり取りする、とか書いてある。なんかカッコイイな、と思った。けど、どういうことなのか、いまいちピンとこなかった。

結局、メソッドという関数を呼び出す、ということで理解はしたんだけど、メッセージをやり取りするというイメージとはなんか違うなぁ、と思ってた。でもなんか、backbone.jsでオブザーバーパターンで、子Viewで発生したeventを親Viewで受けて、他の子Viewに伝えるとか書いてると、メッセージをやり取りしてる!って感じがするよね?

まぁ、そのせいなのか何なのか、デバッグがやりにくい。エラーが出ても、どこで購読設定をしたのか分からないんだよね。書いてる時は、まだ覚えてるんでいいんだけど、少しするとほぼ探しまわることになる。なんか良い方法はないのかしらん?

スポンサーサイト

Appendix

プロフィール

いむら@fintopo いむら@fintopo

フリーのシステムエンジニア兼プログラマです。趣味はガーデニングとカメラ。2017年4月にα7IIを買いました。フルサイズ一眼初心者です。

このページのQRコード

季節暦

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。