Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

180320 Shibuya.apk - Android architecture pattern

196 views

Published on

2018/3/20 の Shibuya.apk で発表させて頂いた資料です。
Mercari US プロジェクトで採用しているアーキテクチャの実用例の

Published in: Software
  • Be the first to comment

180320 Shibuya.apk - Android architecture pattern

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

×
Save this presentationTap To Close