Slide 1

Slide 1 text

Introduction to RIBs CA.swift 2019/03/06 Yuji Hato

Slide 2

Slide 2 text

೾ށ ༐ೋ • Contributed services dekatotoro @dekatotoro yuji.hato

Slide 3

Slide 3 text

Agenda 1. What are RIBs 2. Parts of RIB 3. Communication Between RIBs 4. RIBs Tooling 5. RIBs practice 6. Conclusion

Slide 4

Slide 4 text

1 What are RIBs

Slide 5

Slide 5 text

What are RIBs RIBs is Uber’s cross-platform architecture framework

Slide 6

Slide 6 text

What are RIBs • େن໛ͳϞόΠϧΞϓϦέʔγϣϯ༻ʹઃܭ͞Ε͍ͯΔ • άϩʔόϧͳঢ়ଶΛ࠷খݶʹ཈͑Δ • ςετ༰қੑ • ੹຿ͱґଘؔ܎͕໌֬ • ΦʔϓϯɾΫϩʔζυͷݪଇ(OCP) • ϏδωεϩδοΫυϦϒϯͷtreeߏ଄ • λΠϓηʔϑ ಛ௃

Slide 7

Slide 7 text

What are RIBs • RIB͸ҎԼͷ಄จࣈ - Router - Interactor - Builder • RIBs͸RIBͷू߹ମ ༝དྷ

Slide 8

Slide 8 text

What are RIBs ߏ଄ • RIB tree - RIBsͰ͸ϏδωεϩδοΫͷ୯ҐͰ෼͚ͨ ʮRIBʯΛҰͭͷմͱͯ͠ѻ͏ - RIBΛtreeߏ଄Ͱߏங͢Δ - UI֊૚ͱ͸Ұக͠ͳͯ͘Α͍ - RIBಉ࢜ʹ͸਌ࢠؔ܎͕͋Γɺґଘؔ܎͸ͦ͜ ʹ͚ͩଘࡏ͢Δ - ґଘؔ܎͕ͳ͍RIB΁͸Өڹ͠ͳ͍

Slide 9

Slide 9 text

2 Parts of RIB

Slide 10

Slide 10 text

Parts of RIB RIB Overall

Slide 11

Slide 11 text

Parts of RIB RIB Overall • Interactor • Router • Builder • View(Controller) (optional) • Presenter (optional) • Component

Slide 12

Slide 12 text

Parts of RIB Interactor • ϏδωεϩδοΫ Streamͷߪಡɺঢ়ଶͷมߋΛߦ͍ɺ ਌RIB΍View(Controller)΁ॲཧΛҕ ৡ͢Δ

Slide 13

Slide 13 text

Parts of RIB Router • ϧʔςΟϯά RIBs͸਌ࢠؔ܎Λ࣋ͬͨπϦʔߏ଄ʹ ͳ͓ͬͯΓɺRouter͸InteractorΛ؂ ࢹͯ͠ࢠRIBͱͷ઀ଓ/੾அΛߦ͏

Slide 14

Slide 14 text

Parts of RIB Builder • RIBߏ੒ཁૉͷੜ੒ - Router - Interactor - View(Controller) (optional) - ࢠRIB (optional) • DI ֤ཁૉͷґଘੑͷղܾΛߦ͏

Slide 15

Slide 15 text

Parts of RIB View(Controller) • UIͷදࣔ - Viewͷੜ੒΍ϨΠΞ΢τௐ੔ - Interactor͔Βҕৡ͞ΕͨUIߋ৽ - Router͔Βҕৡ͞Εͨը໘ભҠ - RIBͷoptionalཁૉ

Slide 16

Slide 16 text

Parts of RIB Presenter • DataModelͷม׵ - BusinessModel → ViewModel ม׵ - ViewModel → BusinessModel ม׵ - ม׵ॲཧͷTestability - RIBͷoptionalཁૉͰলུ͞Εͨ৔ ߹ɺม׵ॲཧ͸View(Controller)·ͨ ͸Interactor͕୲͏

Slide 17

Slide 17 text

Parts of RIB Component • RIBͷґଘؔ܎Λ؅ཧ - Builderͷิॿ - ࣗ਎ͷґଘੑΛॴ༗ - RIBΛߏங͢ΔͨΊʹඞཁͳ֎෦ґଘ΁ͷΞΫ ηε - ଞͷRIB͔ΒͷΞΫηε੍ޚ • DIྫ ࢠRIBʹґଘΛ౉ͨ͢Ίʹ਌RIBͷComponent ΛࢠRIBͷBuilderʹ஫ೖ͢Δ

Slide 18

Slide 18 text

Parts of RIB Object references in RIB • Router - Interactor - View(Controller) • Interactor - Presenter - View(Controller) - weak Router • View(Controller) - weak Interactor

Slide 19

Slide 19 text

3 Communication Between RIBs

Slide 20

Slide 20 text

Communication Between RIBs RIB tree downward A RIB B RIB C RIB • ࢠRIBͷBuilder.build()ʹύϥϝʔλͰ౉͢ • ComponentΛ༻͍ͨDIͰRx StreamsΛ౉͢

Slide 21

Slide 21 text

Communication Between RIBs RIB tree upwards A RIB B RIB C RIB • ਌RIBͷInteractor͸ࢠRIBͷListenerΠϯλʔϑΣʔ εΛ࣮૷ • ࢠRIB͕ListenerΛհͯ͠਌RIBͷInteractorͷϏδω εϩδοΫΛ࣮ߦ • ਌RIB͕ࢠRIBͷRx StreamsΛ௚઀subscribe͠ͳ͍ - ϝϞϦϦʔΫΛ๷͙ - ૄ݁߹ɺtestability

Slide 22

Slide 22 text

4 RIBs Tooling

Slide 23

Slide 23 text

RIBs Tooling RIBs Xcode Templates • RIBΫϥεͷੜ੒ • RIBςετΫϥεͷੜ੒ • Component Extensionͷੜ੒

Slide 24

Slide 24 text

RIBs Tooling RIBΫϥεͷੜ੒ • Builder • Interactor • Router • View(Controller) (optional)

Slide 25

Slide 25 text

RIBs Tooling RIBςετΫϥεͷੜ੒ • InteractorTests • RouterTests

Slide 26

Slide 26 text

RIBs Tooling Component Extensionͷੜ੒ • ࢠRIBʹґଘͨ͠ComponentΛੜ੒ ਌RIB͔ΒࢠRIBʹඞཁͳґଘੑΛ஫ೖͨΊͷ Extension

Slide 27

Slide 27 text

5 RIBs practice

Slide 28

Slide 28 text

RIBs practice RIBs simple sample https://github.com/dekatotoro/RIBsSample RootRIB SearchRIB DetailRIB

Slide 29

Slide 29 text

5 Conclusion

Slide 30

Slide 30 text

Conclusion • UIKitʹґଘ͠ͳ͍ϥΠϑαΠΫϧ • ੹຿ͱঢ়ଶͷείʔϓΛ໌֬ʹͰ͖Δ • ϏδωεϩδοΫυϦϒϯͷtreeߏ଄ͰυϝΠϯߏ଄ͷݟ͑Δ ԽͱӨڹൣғ͕೺Ѳ͠΍ͦ͢͏ • େن໛Ͱͳͯ͘΋ಋೖΛݕ౼ͯ͠ྑͦ͞͏

Slide 31

Slide 31 text

Thank you ࢀߟࢿྉ https://github.com/uber/RIBs/wiki https://www.slideshare.net/dhaval2025/ubers-new-mobile-architecture https://www.youtube.com/watch?v=FfwZSk6VRVY https://blog.japantaxi.co.jp/2018/12/09/1991