Save 37% off PRO during our Black Friday Sale! »

RIBs でのダイエット

RIBs でのダイエット

345c78640c646c9c55083efd57fb6e54?s=128

TatsunoriKuri

February 13, 2020
Tweet

Transcript

  1. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    でのダイエット
  2. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ⾃⼰紹介

    2 • Tatsunori Kuri (@kuritatu18) • iOS app Developer • JapanTaxi (2018.9 ~)
  3. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 今⽇話すこと

    3 - 1.RIBsとは - 2. 画⾯ が複雑なときのダイエット⽅法 - 3.ロジックが複雑なときのダイエット⽅法 - 4.まとめ
  4. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    との出会い 4 応募 2018.4 2018.6 内定 2018.9.12 2018.9.16 ⼊社 v4リニューアル RIBs 採⽤
  5. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    とは 5
  6. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    とは 6 (https://github.com/uber/RIBs/wiki より)
  7. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    のコンポーネント 7 - Router - RIB のルーティング - Interactor - ビジネスロジックを持つ - View(Presenter) - レイアウト、ユーザー操作の処理
  8. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    のコンポーネント 8 - Builder - RIB内の構成要素 Router, Interactor, ViewController と  ⼦RIB Builderのインスタンス化 - RIB 内部への依存性の注⼊と、RIB 間の依存関係の解決
  9. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB

    内のコミュニケーション 9 Router Interactor View Controller Builder Routing Presentable PresentableListener Build()
  10. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB

    のルーティングとライフサイクル 10 Child RIB Router Interactor View Controller Builder Parent RIB Router Interactor View Controller Builder Child RIB の Router を attach
  11. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB

    のルーティングとライフサイクル 11 Child RIB Router load() Interactor View Controller Builder Parent RIB Router Interactor View Controller Builder Child RIB の Router を attach
  12. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB

    のルーティングとライフサイクル 12 Child RIB Router load() Interactor activate() View Controller Builder Parent RIB Router Interactor View Controller Builder Child RIB の Router を attach
  13. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB

    のルーティングとライフサイクル 13 Child RIB Router Interactor View Controller Builder Parent RIB Router Interactor View Controller Builder Child RIB の Router を detach
  14. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB

    のルーティングとライフサイクル 14 Child RIB Router Interactor deactivate() View Controller Builder Parent RIB Router Interactor View Controller Builder Child RIB の Router を detach
  15. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB間のコミュニケーション

    15 Child RIB Router Interactor View Controller Builder Parent RIB Router Interactor View Controller Builder Listener経由で 親RIBの処理を呼ぶ
  16. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 16

    https://blog.japantaxi.co.jp/2018/12/09/1991
  17. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    の特徴:ツリー構造 17 ※注⽂導線の⼀部抜粋:2020年2⽉6⽇時点
  18. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 18

    https://github.com/srea/RIBsTreeViewerClient
  19. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 画⾯が複雑になってきたとき

    19
  20. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    × MicroViewController 20
  21. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved MicroViewControllerとは

    21 https://www.icloud.com/keynote/0vgTYDXyHQTd0l1FKTiF1jT7g#MicroViewController-en
  22. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ⼦ViewController

    の追加 22 - View - StackView
  23. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 利⽤例

    23
  24. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 注⽂詳細画⾯

    24
  25. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 注⽂詳細画⾯のViewHierarchy

    25
  26. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 注⽂詳細画⾯のViewHierarchy

    26
  27. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    × MicroViewController 27 - Builder.build()
  28. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    × MicroViewController 28 - Builder.build()
  29. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    × MicroViewController 29 - Builder.build()
  30. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    × MicroViewController 30 - ViewControllable - Router.Init()
  31. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    × MicroViewController 31 - Router.didLoad()
  32. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    × MicroViewController 32 - Router.didLoad()
  33. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ViewHierarchy

    と RIBsツリー 33
  34. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 画⾯全体は複雑でも

    1つ1つはスリムになった 34
  35. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ロジックが複雑になってきたとき

    35
  36. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View

    の無い RIB に切り出す 36
  37. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View

    の無いRIB 37
  38. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View

    の無いRIB の追加 38 Owns corresponding view の チェックを外す ViewController の無い RIB が作成される Templete から RIB を選択
  39. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB

    の分割前 39 Parent RIB Router Interactor ・処理A ・処理B ・処理C View Controller Builder
  40. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB

    の分割後 40 Parent RIB Router Interactor ・処理A View Controller Builder B Child RIB Router Builder Interactor ・処理B C Child RIB Router Builder Interactor ・処理C B Child Listener C Child Listener
  41. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 利⽤例

    41
  42. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 乗⾞地選択画⾯

    42
  43. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 乗⾞地選択画⾯の下の部分

    43
  44. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View

    の無い RIB 44
  45. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View

    の無い RIB 45 地図を動かした際の緯度/経度でAPI から住所を取得するRIB
  46. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View

    の無い RIB 46 APIから乗⾞の禁⽌エリア取得と禁⽌ エリア内かの判定をするRIB
  47. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View

    の無い RIB 47 次の画⾯に必要な情報をAPIから取得 するRIB
  48. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View

    の無い RIB 48 View の無いRIBから別のViewのある RIB にルーティングすることもある
  49. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 複雑なロジックを分散することで

    1つ1つはスリムになった 49
  50. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved まとめ

    50 - 画⾯とロジックの両⾯からダイエットをすることが可能 - ViewController の平均⾏数:154、500⾏超え1つ - Interactorの平均⾏数:141、500⾏超え2つ - 1つ1つの RIB がスリムになる - 責務が明確になる - 追加、修正による影響が最⼩限に - テストが書きやすい
  51. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs

    とっても良いですよ 51
  52. จষɾը૾౳ͷ಺༰ͷແஅసࡌٴͼෳ੡౳ͷߦҝ͸͝ԕྀ͍ͩ͘͞ɻ Proprietary and Confidential ©2020 JapanTaxi, Inc. All Rights Reserved

    ˟102-0094ɹ౦ژ౎ઍ୅ా۠لඌҪொ3-12 3-12 Kioicho Chiyoda-ku, Tokyo 102-0094 Japan TEL 03-6265-6265ɹFAX 03-3239-8115 www.japantaxi.co.jp