«前の日記(2008年02月15日) 最新 次の日記(2008年02月17日)» 編集

ema log


2008年02月16日 効果音が口をついてでそうな今日この頃 [長年日記]

_ [最近]タスク山積み

来週までは死にそうです。レポート書き書き。プレゼンしこしこ。

久しぶりに LDR のピンが80超えそう。一週間ぐらい消化していないのが原因w

それにしても、CAVE は相変わらず酷いなぁ。僕としては、中身は外れてないので、出たらそれなりに遊びたいとは思いますが・・・。GIGAZINE で早々に吹いた。色の遷移について取り上げれたらなぁ。と思ったけど、絶対やらないに一票。

DS録画方法まとめの記事は絶対に書く。もちろん、落ち着いたらだけど。そしたら、スタンド買ってくる。

_ [Programming]MVC ってどうやるのが良いのだろう?

全然関係ない内容ですが、MVC の教科書とか無いのかなー。特に Model と View の同期の取り方がピンと来ない。tage 作ったときは、Controller がイベントハンドラの大半を処理して、Model を更新した後、独自のイベント機構*1で更新通知のイベントをとばして View がそれを observe する仕組みにした。

View も Controller 経由でしかモデルを更新しない。Controller に集約しすぎ?

例えば、「フレーム削除」が押されると(命名規則の不一致はさておきorz)

  1. 「フレーム削除」が押される
  2. Controller.Project.removeFrame が DOM Event でコールバックされる
    1. モデルを操作してフレームを削除
    2. remove_frame イベントを invoke
      1. View.Thumbnails.removeFrameHandler がコールバックされ、サムネイル除去
    3. モデルを操作してカレントフレームを変更
    4. change_frame イベントを invoke
      1. View.refreshFieldElements がコールバックされ、フィールド描画を更新
      2. View.NextAndHold.refresh がコールバックされ、NEXTS と HOLD の更新
      3. View.Thumbnails.changeFrameHandler がコールバックされ、サムネイルの選択枠表示の更新
    5. update_period イベントを invoke
      1. View.updatePeriod がコールバックされ、パスワード(マーシャルデータ)の更新
      2. View.NextAndHold.update がコールバックされ、NEXTS と HOLD の表示、非表示の切り替え
      3. UndoManager.update がコールバックされ、履歴スタックに新しいパスワードを積む

みたいなフローになってます。実際の Controller.Project.removeFrame はこんな感じ、コンポーネント単位で処理を独立できた感じはあります。たしか一部、どうしてもイベントの伝達順序に依存してるような部分があってイマイチなところも残ってます。

model/view/controller」なんかだと View は update で丸ごと更新だしなぁ。Model が View を知ってるのもなんだか気持ち悪い。どう書くのが良いんだろう?Observer パターンってあんまり好きじゃない。複雑になるにつれて、結局べったりするイメージ。

Rails のは Controller がイベントハンドラで、DB などから Model を生成して、View は完全なレンダラ、って設計で割と綺麗なんだけど、普通の GUI アプリの枠組みだと差分更新したいからなぁ。Ajax とか絡んできたときどうやって書いてるのかな?Model をどこに持つか次第か?

*1 373行辺り。登録されたリスナーをコールバックするだけ