Dev Summit: Create offline-first apps を試聴したのでそのメモです()。
repository 層の役割
リポジトリー層の役割として、少なくとも 2 つのデータソース(LocalDataSource と NetworkDataSource)からデータを取得することを考える。
この際、取得できるエンティティが異なるかもしれないが(AuthorEntity
とNetworkAuthor
など)、それを整形して統一して返してあげるのもData Layer の役割。
- Read は Flow を使って
- Write は suspend fun で
ネットワークのモニター
- ネットワーク接続がとれるまでキューに貯めておく必要がある!
- 書き込みについて
- ネットワークをモニターし、接続が取れたらキューからジョブを実行させる
LocalDataSource については、データの一貫性のために常に読み込みできることが大切!
失敗時にリトライが必要そうなら、再度キューに入れる作戦で!
Synchronization
ローカルデータとリモートデータを統一させること。
- Pull-based
- on demand で取得する
- 実装が簡単
- Push-based
- データ使用量が最小ですむ
- must be supported by the network.
Links
おわりに
なんとなくやりたいことはわかったけど、実際に手動かしてみないと!