Slide 1

Slide 1 text

Implementing TypeErasure in ViewController Nobuo Saito Tech Lead (iOS)

Slide 2

Slide 2 text

Making TypeErasure for ViewController

Slide 3

Slide 3 text

Tech Lead iOS Nobuo Saito

Slide 4

Slide 4 text

Agenda What’s New in Mercari/Mew Technical Debt/Assets Composition of Mercari iOS ViewControllerRequest Conclusion

Slide 5

Slide 5 text

Agenda What’s New in Mercari/Mew Technical Debt/Assets Composition of Mercari iOS ViewControllerRequest Conclusion

Slide 6

Slide 6 text

iOSDC Review MicroViewController = One of the microservices implemented in iOS github.com/mercari/Mew

Slide 7

Slide 7 text

TableView CollectionView Auto/manual sizing LifeCycle/reuse

Slide 8

Slide 8 text

Agenda What’s New in Mercari/Mew Technical Debt/Assets Composition of Mercari iOS ViewControllerRequest Conclusion

Slide 9

Slide 9 text

iOS Technical Debt Massive ViewController 1 layer Objective-C Tight binding between classes

Slide 10

Slide 10 text

Technical Debt? linux swiftc UIKit

Slide 11

Slide 11 text

Increase in maintenance cost Negative influence from knowledge of existing code The Nature of Technical Debt

Slide 12

Slide 12 text

Technical Assets Features work properly Features can be reused New features are not added Code cannot be accessed

Slide 13

Slide 13 text

Agenda What’s New in Mercari/Mew Technical Debt/Assets Composition of Mercari iOS ViewControllerRequest Conclusion

Slide 14

Slide 14 text

All modules import Kit/Entity The app imports all modules     MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3

Slide 15

Slide 15 text

Pros of Microframeworks project.pbxproj Swift internal Reduces unnecessary sharing

Slide 16

Slide 16 text

Cons of Microframeworks Circular dependency Dynamic linking time Bundle Not supported by some OSS

Slide 17

Slide 17 text

Cons of Microframeworks Circular dependency Dynamic linking time Bundle Not supported by some OSS

Slide 18

Slide 18 text

    MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3 ItemDetail cannot import Search

Slide 19

Slide 19 text

Overloads functions: (Request) -> Response

Slide 20

Slide 20 text

    MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3 Get all Mercari resources from EnvironmentProvider EnvironmentProvider User GetProfileRequest MercariEnvironment

Slide 21

Slide 21 text

    MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3 Definition of request Type class, Type implementation DIP (Dependency Inversion Principle) protocol struct function

Slide 22

Slide 22 text

Agenda What’s New in Mercari/Mew Technical Debt/Assets Composition of Mercari iOS ViewControllerRequest Conclusion

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

    MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3 3 protocols defined in MercariKit Injectable/Interactable

Slide 25

Slide 25 text

    MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3 Make ViewControllers Input/Output in MercariEntity Injectable/Interactable Input Output

Slide 26

Slide 26 text

    MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3 Mercari can import Search Injectable/Interactable Input Output let vc = SearchVC(...)

Slide 27

Slide 27 text

    MercariKit

Slide 28

Slide 28 text

    MercariKit

Slide 29

Slide 29 text

    MercariKit

Slide 30

Slide 30 text

    MercariEntity

Slide 31

Slide 31 text

    Mercari

Slide 32

Slide 32 text

    ItemDetail

Slide 33

Slide 33 text

    MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3 Get ViewController instance from EnvironmentProvider API Gateway for VC ViewControllerRequest Search IO let vc = SearchVC(...)

Slide 34

Slide 34 text

    MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3 Code cannot be referenced Features work properly

Slide 35

Slide 35 text

    MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3 _人人人人人人人人_ >Huge buried treasure!<  ̄Y^Y^Y^Y^Y^Y^Y^ ̄ ViewControllerRequest ViewControllers IO WrapperOfObjC

Slide 36

Slide 36 text

Agenda What’s New in Mercari/Mew Technical Debt/Assets Composition of Mercari iOS ViewControllerRequest Conclusion

Slide 37

Slide 37 text

Conclusion Divide the framework Split duties and turn liabilities into assets To do that, types should be well-defined

Slide 38

Slide 38 text

No content