branch10480’s blog

Topics that I've learned.

2020年3月1日

今日の学習内容

メイントピック

  • 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アプリでは以下で実現可能。

  1. NotificationCenter の通知機能
  2. Observerパターンを担うライブラリ(RxSwift, ReactiveCocoaなど)

Dispatcher

Dispatcher は基本的にアプリケーション上に1つだけ存在するため、アプリケーションと同じライフサイクルのクラスであったり、シングルトンのクラスになる。