概要
アーキテクチャ:アプリーケーションやソフトウェア開発をする上での設計手法
意識することで開発者はある程度同じ構造で開発することができレビューも行うことができる
アーキテクチャが存在しないとどうなる?
ActivityやFragmentの処理が膨らみ可読性が低くなる
LifeCycleの破棄時などに処理が再実行されCPUやメモリへの負荷が大きくなる
→よってUIをモデルで操作して永続なデータとして保持することを推奨されている
MVVMは大規模なアプリのアーキテクチャに向いている
View → ViewModel → Model
の依存関係がある
※矢印の向きには意味があり向いていない方向の層のことを知らない
(VVMMモデルって覚えた方が楽そう...)
メモ
よく見るMVVMのモデル図がGoogleのアーキテクチャのドキュメントから消えている気がするのですがComposeが主流になりつつある中でアーキテクチャも変化しているんですかね?
理解深まったら記事更新します、詳しい方教えてください
View
担当
画面の表示や更新
- ViewModelのLiveDataをObserveしてUIを表示させる
ユーザーの入力処理の受付
- clickメソッドなどを受けViewModelのデータ処理メソッドを呼び出すなど
ViewModel
担当
両者の間を仲介して互いの状態変更を通知、反映させる役割を担う
- Model層からView層にデータを受け渡す
- 受け渡しなので双方向矢印な気もするがView層がViewModel層を参照している
ViewModelからView層の操作をしてはいけない
- メモリリークやnullポインタの可能性が出る
- Repositoryとの結びつけのためのDIはHiltが推奨されている
UIの状態保持
- 双方向データバインディングする必要があるものは MutableLiveData
- 単方向でよいものは LiveData
- Viewのライフサイクルに依存しないため状態を存続できる
Model
担当
データの管理や保存、外部との入出力などの内部的な処理を担う
- APIやデータベースへのアクセスを管理するクラス
- 処理をわかりやすくさせるdata class
追記
Android Study JamでCompose勉強中なのでCompose含めたアーキテクチャに対して理解が深まれば再度追記します
参照
https://developer.android.com/jetpack/guide?hl=ja
https://zenn.dev/dd_sho/articles/5f32ce2942cbd2