LoginSignup
69
72

More than 5 years have passed since last update.

MVVMについて考察

Last updated at Posted at 2015-04-26

MVVMについて調査してみて、得られた理解をまとめてみます。
走り書きですが、書いてみます。
突っ込みどころがたくさんあるかと思いますが、指摘していただけるとありがたいです。
考えがしっかりでき次第、記事を新たに書き直したいと思います。

MVVM

各クラスが公開インスタンス変数を管理することによって、画面状態の管理を安全に行うアーキテクチャです。

Untitled.png

View

ViewModelに設定された公開インスタンス変数に合わせて見た目を構成する責任を持つクラス群です。

[できること]

  • ViewModelに自身をObserverとして登録できる
  • ViewModelからパラメータ変更の通知を受け取ることができる
  • ViewModelのパラメータを参照することができる
  • 画面の見た目を公開インスタンス引数として持つ
  • ユーザからのアクションを受け取ることができる
  • ViewModelに動作を依頼することができる(基本的には横流し)

ViewModel

ユーザに見せる情報を公開インスタンス変数として持ち、管理する責任を持つクラス群です。

[できること]

  • Modelに自身をObserverとして登録できる
  • Modelからパラメータ変更の通知を受け取ることができる
  • Modelのパラメータを参照することができる
  • 自クラスのパラメータを更新し、Viewに変更を通知する
  • Viewからの動作依頼をメソッド呼び出しの形で受け取ることができる
  • 各Modelに動作を依頼することができる

Model

APIアクセス・主要なメモリ・CoreDataの管理責任を持つ

[できること]

  • 動作依頼に対し、APIアクセス・主要なメモリ・CoreDataにアクセスできる
  • 自クラスのパラメータを更新し、ViewModelに変更を通知する
  • ViewModelからの動作依頼をメソッド呼び出しの形で受け取ることができる

メリットとデメリット

  • メリット
    • 各クラスは自クラスの公開パラメータの管理のみに集中できる(他のクラスの挙動を意識する必要がない)
    • クラス内で役割が閉じているためテストがしやすい(多分)
    • ビジネスロジックの実行と画面制御を混同することがなくなる
  • デメリット
    • オブザーバ同期から外れた画面構成を入れられなくなる
    • 動作の流れが見えづらくなる

その他

  • Model -> ViewModel -> Viewへの情報の流れがリアクティブプログラミングに重なる
  • この構成で実装するとvoidを出力とするメソッドが大半になる
  • 参考文献
69
72
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
69
72