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

設計にみるAWA Androidアプリのこれまでとこれから

設計にみるAWA Androidアプリのこれまでとこれから

AWA Androidアプリの設計に関する過去と未来の話。

Ryota Takemoto

March 12, 2018
Tweet

More Decks by Ryota Takemoto

Other Decks in Programming

Transcript

  1. Model • DB, APIアクセス • ビジネスロジック Activity / Fragment •

    プレゼンテーションロジック • ビジネスロジック
  2. Model • DB, APIアクセス • ビジネスロジック Activity / Fragment •

    プレゼンテーションロジック • ビジネスロジック
  3. Model • DB, APIアクセス • ビジネスロジック Activity / Fragment •

    プレゼンテーションロジック • ビジネスロジック ビジネスロジックを書く層が必要
  4. Model • DB, APIアクセス • ビジネスロジック Activity / Fragment •

    プレゼンテーションロジック • ビジネスロジック
  5. DbClient / ApiClient • DB, APIアクセス Activity / Fragment •

    プレゼンテーションロジック Model • DbClient / ApiClientの操作 UseCase • ビジネスロジック
  6. DbClient / ApiClient • DB, APIアクセス Activity / Fragment •

    プレゼンテーションロジック Model • DbClient / ApiClientの操作 UseCase • ビジネスロジック ビジネスロジックを書く層 ◎ Modelの責務を分割 ◎
  7. DbClient / ApiClient • DB, APIアクセス Activity / Fragment •

    プレゼンテーションロジック Model • DbClient / ApiClientの操作 UseCase • ビジネスロジック だが、まだまだ問題が
  8. ViewModel CommandUseCase QueryUseCase ApiClient Repository Activity DataCommand DataQuery UI 画⾯データの管理

    永続化データのI/F データ更新・取得処理の組み⽴て ビジネスロジック
  9. ← データソース(API)を意識してる ← 保存先は知らない interface Repository<T> { fun fetch(): Single<T>

    fun save(data: T) } repository.fetch() .doOnSuccess { repository.save(it) } repository.fetch() repository.save(it) APIからデータを取得し、DBに保存
  10. interface Repository<T> { fun save(data: T) } apiClient.fetch() .doOnSuccess {

    repository.save(it) } ← APIからの取得を意識する apiClient.fetch() repository.save(it) ← 保存先は知らない APIからデータを取得し、DBに保存