Android アプリ設計パターン入門 第7章 を
同じチームの人がもうちょっと語る
Tsuyoshi Yoshioka (@tsuyogoro)
Mercari Android Engineer
About me
Tsuyoshi Yoshioka (@tsuyogoro)
Android engineer (Mercari US pj)
Mercari, Inc
Chapter 4 (差分開発にみる設計アプローチ)
Mercari JP by
Chapter 7 (チームとアーキテクチャ )
Mercari US by
Example introduced in section 7
1. Layered architecture (4 layers)
2. Uni-directional data flow (with RxJava2)
3. Custom scope (Dagger2)
Base idea of layered architecture
View
ViewModel Service Repository
action: Completable
(fetch data)
action: Completable
(fetch data via API)
action: Completable
(set data in repository)
observeData: Flowable
(actually BehaviorProcessor)
observeXXX: Flowable
(calculate values)
observeXXX: Flowable
(calculate values for view)
Look “if actions complete or error”
Look “values”
Today’s topic : How’s in case of interactive view?
State changes
by user’s operation
Fields have dependencies
each other
Two types of state
● Domain state
○ 出品に関わるstate
○ 商品名、サイズ、配送方法 ...など、出品時にサーバへ送る重要な値から構成される
● View state
○ 表示に関する状態で、出品そのものには影響しない state
○ 例えば「ポップアップは一度ユーザが closeしたら、2度は出さない」といったユースケースで管
理すべき状態
ViewModel Service Respository
View state Domain stateSet input
Boundary of lifecycle
ViewModel Service Respository
View state Domain state
出品開始〜完了 (中断) が生存期間
Activity/Fragmentの
lifecycle
そして、Activityがいつ破壊されようが、再生成された時に
ViewModelへbindすることで即座に画面の状態が復元されるようにする
How?
ViewModel Service Respository
View state Domain state
出品開始〜完了 (中断) が生存期間
Activity/Fragmentの
lifecycle
(2) ここを BehaviorProcessor にする
(ただし外からonNextが呼べないように、interface は Flowable)
(1) この期間、DIに使うDagger componentが唯一のインスタ
ンスになるように管理する (Applicationクラスを活用)
The lifecycle of ViewModel (AAC)
https://developer.android.com/topic/libraries/architec
ture/viewmodel.html#lifecycle
Summary
● 7章のlayered architectureをInteractiveな画面に使う場合は、データの scopeを考える所から設計
していきましょう (domain / view)
● レイヤごとのライフサイクルをきちんと考えて、 Activity再生成に耐えられるような作りを実現してい
きましょう (Dagger2のcomponent / BehaviorProcessor)
● Repositoryまでデータを落とすという一見冗長な作りは、 Serviceレイヤによって逆に “scalableな作
り” になっている点がポイント
About section 4 (my article…)
● そんなわけで秘伝のタレたっぷりの日本市場向けのコードベース
● 只今絶賛改善中
● 何か特別なことをしている (Frameworkを作るなど) のではなく、どういうチームを作っていくかという
ことを全力で検討中。良いアーキテクチャを作る、とはそういう事なのかもしれませんね。
https://play.google.com/store/a
pps/details?id=tsuyogoro.sugo
rokuon&hl=ja
Sample of “Mercari US like architecture + AAC ViewModel”

180320 Shibuya.apk - Android architecture pattern

  • 1.
    Android アプリ設計パターン入門 第7章を 同じチームの人がもうちょっと語る Tsuyoshi Yoshioka (@tsuyogoro) Mercari Android Engineer
  • 2.
    About me Tsuyoshi Yoshioka(@tsuyogoro) Android engineer (Mercari US pj) Mercari, Inc
  • 3.
    Chapter 4 (差分開発にみる設計アプローチ) MercariJP by Chapter 7 (チームとアーキテクチャ ) Mercari US by
  • 4.
    Example introduced insection 7 1. Layered architecture (4 layers) 2. Uni-directional data flow (with RxJava2) 3. Custom scope (Dagger2)
  • 5.
    Base idea oflayered architecture View ViewModel Service Repository action: Completable (fetch data) action: Completable (fetch data via API) action: Completable (set data in repository) observeData: Flowable (actually BehaviorProcessor) observeXXX: Flowable (calculate values) observeXXX: Flowable (calculate values for view) Look “if actions complete or error” Look “values”
  • 6.
    Today’s topic :How’s in case of interactive view? State changes by user’s operation Fields have dependencies each other
  • 7.
    Two types ofstate ● Domain state ○ 出品に関わるstate ○ 商品名、サイズ、配送方法 ...など、出品時にサーバへ送る重要な値から構成される ● View state ○ 表示に関する状態で、出品そのものには影響しない state ○ 例えば「ポップアップは一度ユーザが closeしたら、2度は出さない」といったユースケースで管 理すべき状態 ViewModel Service Respository View state Domain stateSet input
  • 8.
    Boundary of lifecycle ViewModelService Respository View state Domain state 出品開始〜完了 (中断) が生存期間 Activity/Fragmentの lifecycle そして、Activityがいつ破壊されようが、再生成された時に ViewModelへbindすることで即座に画面の状態が復元されるようにする
  • 9.
    How? ViewModel Service Respository Viewstate Domain state 出品開始〜完了 (中断) が生存期間 Activity/Fragmentの lifecycle (2) ここを BehaviorProcessor にする (ただし外からonNextが呼べないように、interface は Flowable) (1) この期間、DIに使うDagger componentが唯一のインスタ ンスになるように管理する (Applicationクラスを活用)
  • 10.
    The lifecycle ofViewModel (AAC) https://developer.android.com/topic/libraries/architec ture/viewmodel.html#lifecycle
  • 11.
    Summary ● 7章のlayered architectureをInteractiveな画面に使う場合は、データのscopeを考える所から設計 していきましょう (domain / view) ● レイヤごとのライフサイクルをきちんと考えて、 Activity再生成に耐えられるような作りを実現してい きましょう (Dagger2のcomponent / BehaviorProcessor) ● Repositoryまでデータを落とすという一見冗長な作りは、 Serviceレイヤによって逆に “scalableな作 り” になっている点がポイント
  • 12.
    About section 4(my article…) ● そんなわけで秘伝のタレたっぷりの日本市場向けのコードベース ● 只今絶賛改善中 ● 何か特別なことをしている (Frameworkを作るなど) のではなく、どういうチームを作っていくかという ことを全力で検討中。良いアーキテクチャを作る、とはそういう事なのかもしれませんね。
  • 13.