Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWAのフルリニューアルを支えたアーキテクチャ

 AWAのフルリニューアルを支えたアーキテクチャ

CA.apk #7

Keita Kagurazaka

March 26, 2019
Tweet

More Decks by Keita Kagurazaka

Other Decks in Programming

Transcript

  1. AWAについて • 定額制音楽ストリーミングサービス • 競合にはSpotify, Apple Music, YouTube Music, LINE

    MUSICなどなど • Androidアプリは2019年1月24日にフルリ ニューアルをリリース
  2. 更新系 View ViewModel UseCase ApiClient DB Data Command ApiClient Repository

    Data Command • Viewからのイベントを受けてUseCaseをキック する
  3. 更新系 View ViewModel UseCase ApiClient DB Data Command ApiClient Repository

    Data Command • DataCommandをオーケストレーションして処 理を行う • 戻り値はCompletable
  4. 更新系 View ViewModel UseCase ApiClient DB Data Command ApiClient Repository

    Data Command • APIからデータを取得してDBに書き込む • 扱うEntityごとにクラスが分かれる • 戻り値はCompletable
  5. 更新系 View ViewModel UseCase ApiClient DB Data Command ApiClient Repository

    Data Command • Entityを保存するだけ • トランザクションを管理する • 戻り値はUnit
  6. 更新系 View ViewModel UseCase ApiClient DB Data Command ApiClient Repository

    Data Command • 消えてもいいキャッシュはRealm • 重要なデータはSQLite (Room) • 設定系はSharedPreferences • プロセスを跨がせないデータはon-memory
  7. 参照系 View ViewModel UseCase DB Data Query Repository Data Query

    RealmのためにUIスレッドで実行 Repository
  8. 参照系 View ViewModel UseCase DB Data Query Repository Data Query

    Repository • DBの変更を検知してRxJavaのストリームに変 換する • 戻り値はFlowable<Entity> • Realmの場合はRealmResults<Entity>
  9. 参照系 View ViewModel UseCase DB Data Query Repository Data Query

    Repository • 必要があればEntityを分解した値にしたり、 distinctUntilChangedしたり • ごく一部のキャッシュしない参照のためにAPIを 叩くこともある
  10. 参照系 View ViewModel UseCase DB Data Query Repository Data Query

    Repository • DataQueryをオーケストレーションして、Viewに 必要な情報を作る
  11. 参照系 View ViewModel UseCase DB Data Query Repository Data Query

    Repository • UseCaseをobserveしてObservableFieldに詰 め、DataBindingでViewをリアクティブに更新 する