前回の続きで、MVPをTypeScriptで書き直してみました。simple versionとなっているのは、原著より実装するページを減らしたためです(原著のサンプルコードだと検索ページと詳細ページが実装されているのですが、今回は検索ページのみ実装しました)。
コードはこちら: yinm/typescript-architecture_samplecode
モジュールごとの概要を書きます。
Model
- Presenter, Viewのことを知らない (役割としては、MVCのModelと変わらない)
- 今回のコードだと、APIリクエストを担当する
Presenter
- Model, Viewのことを知っている
-
Viewから受けたユーザーの入力を元に、Modelへの処理の依頼を行い、その結果をViewに描画するよう依頼する
- 今回の例だとプレゼンテーションロジックはなさそうだが、ある場合はPresenterが行う
View
- Presenterのことを知っており、Modelのことは知らない
- 画面の描画とユーザー入力の受付を担当し、ユーザーの入力に対する処理をPresenterに依頼する
-
Presenterからの依頼を受けて描画を行う (Passive Viewの場合はこのパターンしかない)
- Supervising Controllerの場合は、Modelの変更をObserverパターンで監視して、Modelの変更したタイミングで描画することもある
感想
Swiftの読解力の低さなどから、コードをうまく書けてる感じがしません... (端折ったり、雰囲気で書いた部分が多い)
ひとまず以下の役割がわかってればよいのかなあと思ってます。
-
View
- 画面表示
- ユーザー操作の受付
-
Presenter
- Modelへの処理要求
- プレゼンテーションロジック
-
Model
- ドメインロジック