今日の学習内容
メイントピック
- MVVM
- RxSwift
- Fluxアーキテクチャ
サブトピック
- Test Double
- 疎結合
メモ
Test Double
テスト対象が依存しているコンポーネントを置き換える代用品のこと。ダブルは代役、影武者を意味する。
MVVMにおける protocol の重要性
VM, Model ともに接合部は protorol とし、Test Double を注入できるようにし、テスタブルにすることが重要。
MVVMの選定にあたり
Rx は特有のさまざまな概念が登場するため学習コストはかかる。ライブラリの アップデートに追従することも必要。
MVVM のために外部ライブラリを導入するコストを大きく考えるのであれば、MVP など の別アーキテクチャパターンに切り替えた方が現実的。
MVVM を選ぶ利点
View の更新を ViewModel とのデータバインディングで実現することで、両者の疎結合が 実現することで以下のメリットを享受できる。
- 可読性の向上
- テスト容易性の向上
Flux アーキテクチャ
データフローが単一方向であることが中心の考え方。
ラテン語の Fluxus という単語が由来。Fluxus は Flow (流れ)のこと。
Flux を構成するコンポーネント
Action
type(実行する処理を特定する) と data(実行する処理に紐づく) を保持したオブジェクト
Dispatcher
Action を受け取り、自身に登録されている Store に伝える。
Store
状態を保持し、Dispatcher から伝わった Action の type と data に応じて、状態を変更する。
View
Store の状態を購読し、その変更に応じて画面を更新する。
iOSにおける、GUIアーキテクチャのView
= UIViewController + UIView
Viewへ向かうデータフロー
Storeの状態をViewに反映するデータフロー。 iOSアプリでは以下で実現可能。
- NotificationCenter の通知機能
- Observerパターンを担うライブラリ(RxSwift, ReactiveCocoaなど)
Dispatcher
Dispatcher は基本的にアプリケーション上に1つだけ存在するため、アプリケーションと同じライフサイクルのクラスであったり、シングルトンのクラスになる。