Android Architecture Components
依存の方向が単一。ActivityはViewModelに依存、ViewModelはRepositoryに依存, Repositoryは(local, remote モデルに依存)
ViewModel(のレベルで下部から独立して?)テストができる
Repositoryでデータの整形(LiveDataに)、データソースの選択ができる
sourceで、外部との接続、DAOの記述ができる。
https://gyazo.com/6bbddef2966b052218c5ea438389e868
ここを起点に勉強するのがよさそう
抜き書きする
ActivityやFragmentは、 システムの都合で簡単に破棄される
UIをモデル(Viewオブジェクトではなく)で操作する
永続モデル(アプリ?Activityのライフサイクルの影響をうけない)
数日後にユーザーが戻ってもローカルの情報をすぐに表示、最新でなければ更新
UIは、fragmentとlayoutで構成する
userId, user
ViewModelはconstructorで、fragmentから savedStateでデータを拾う
ただし、ViewModelの中では、Fragment側のviewオブジェクトへの直接参照を入れない
UIの更新は、fragment側で、viewModel.user.observe()する
データの取得は、repositoryモジュールの仕事(viewModelにさせない)
具体的な対象は、データソース側で、repositoryモジュールは、シンプルなAPIを提供するのが仕事
要らない子にみえるけど、綺麗にする価値がある
repositoryクラスでは、ソースのインスタンスに依存する。
このあたりから、理解がついていけてない。
cacheは、repositoryクラスのレベルで使う? (ViewModelではなく)
Android Roomを使って、データクラスを実装するのは、pass。現状、firestore側に実装を寄せてるので。 resourceレベル、room, firestoreを個別に定義(実装する)