Remoraを眺めてみた1

Remoraを「読んでみた」ではなく「眺めてみた」です。感想メモその1。
Revision 10695: /addons/trunk/site
http://svn.mozilla.org/addons/trunk/site/

MVC間のデータ移動はざっくり

コントローラではモデルから受け取ったデータをざっくりビューに押し込んでいる。
サニタイズをapp_controllerでビューにセットする直前にやってる。$this->publish()ってやつ。それはビューでやりたい気も。

ビューはやっぱりモデル名やカラム名で溢れる

ビューが一見あんまりモデル名やカラム名で溢れてないって書いたけれど、前言撤回。

たとえばapp/views/addons/display.thtmlなんかそんなのでいっぱい。foreachの中で$addon[‘Version’][0][‘File’][0][‘id’]こんなのとか。てことは渡されてるデータは$addons[0][‘Version’][0][‘File’][0][‘id’]みたいなのか。うげげ。

ビューの共通ロジックもコンポーネントに

コントローラごとに違う処理の場合コントローラが持っているけれど、コントローラまたいで共通のロジックの場合、コンポーネントにしてあってビューからロジックを呼び出している。

app/views/addons/recommended.thtmlだと

$prevPath = $this->controller->Image->urlForAddonPreview($addon[‘Addon’][‘id’], 1);

こんな感じ。
こういうのってたいていヘルパー使うと思うんだけどなんでなんだろう。
Imageコンポーネントの中身見てみるとモデルにアクセスしてるメソッドがあった。findByIdとか。ああだからこの辺の機能まとめてコンポーネント(コントローラ)なんだ。納得した。
あとコンポーネントのstartupで$this->controller =& $controller;ってしておけばコンポーネントからモデルにアクセスするのも簡単なのね。でもappimport(Model, Hoge)でモデル入れといてnew Hoge()した方が分かりやすいしアクセスしやすい気がしないでもない。このへんはあらかじめ規約で決めとくのかな。そっかこれならコンポーネントでコントローラのメソッドが使えるんだ。redirectとかflashとか。

真似してやってみたけれどviewからだと$this->controller->Componentでアクセスできない。何か設定が足りないかな。ビューがコントローラのオブジェクト持ってないからか。というわけでFAQを参考にコンポーネントのスタートアップでコンポーネント自身をビューに渡して、ビューからコンポーネントに$componentでアクセスできるやり方にしてみた。

どうでもいいけど眺めてたデータは五日前のRevision 10565なのに今はもうRevision 10695になってる。更新してみたら30個以上ログがあった。

続きはそのうち。

広告

Remoraを眺めてみた1」への1件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中