前回の続きで、Cocoa MVCをTypeScriptで書き直してみました。
コードはこちら: yinm/typescript-architecture_samplecode
モジュールごとの概要を書きます。
EventEmitter / Model
- 原初MVCと全く同じ (ControllerやViewのことは知らず、自身の状態に変化があった時にEventEmitterを使って通知する)
Controller
- Model, Viewのことを知っており、ユーザーの入力に応じた処理をModelに依頼、Model・Viewのイベントハンドラの設定、Viewの生成を行う
View
- ModelやControllerのことは知らず、画面の描画を担当する
- (原初MVCの実装のままだと何もやることがないクラスになりそうだったので、HTMLをJSで生成する仕事を与えて、それっぽくしてます)
おまけ
コードを書いてる途中で、unmount時のイベントリスナーの解除をしてないことに気付いたのですが実装してません(原初MVCとの差分がわかりにくくなるかなと思いまして...)。
Cocoa MVCのWebフロントエンド版の実装でいうと、Todoアプリ · JavaScript Primer #jsprimerも参考になるのかなと思います。iOSアプリ設計パターン入門との違いは、Viewのイベントリスナーの追加をView側で行っていることでしょうか(Controllerからは、Callback関数を渡す)。リッスンしたいイベントをController側で変更したいなどの要件がないなら、View側でイベントリスナーを追加する方がすっきりするのかなあと思いながら、コードを読んでました。