Slide 1

Slide 1 text

ViewControllerのTypeErasureを実装する 齋藤 暢郎 Tech Lead (iOS)

Slide 2

Slide 2 text

ViewControllerのTypeErasureを作る

Slide 3

Slide 3 text

Tech Lead iOS Nobuo Saito

Slide 4

Slide 4 text

Agenda What’s New in mercari/Mew 技術的負債/技術的資産 メルカリiOSの構成 ViewControllerRequest Conclusion

Slide 5

Slide 5 text

Agenda What’s New in mercari/Mew 技術的負債/技術的資産 メルカリiOSの構成 ViewControllerRequest Conclusion

Slide 6

Slide 6 text

iOSDCのおさらい MicroViewController = iOSにおける Microservices の実装のひとつ 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 技術的負債/技術的資産 メルカリiOSの構成 ViewControllerRequest Conclusion

Slide 9

Slide 9 text

iOSにおける技術的負債 Massive View Controller 1 Layer Objective-C クラス間の密結合

Slide 10

Slide 10 text

技術的負債? linux swiftc UIKit

Slide 11

Slide 11 text

メンテナンスコストの増大 既存コードのためのノウハウの悪影響 技術的負債の正体

Slide 12

Slide 12 text

技術的資産 機能が正しく動いている 機能が再利用可能である 機能追加を行わない コードにアクセスすることができない

Slide 13

Slide 13 text

Agenda What’s New in mercari/Mew 技術的負債/技術的資産 メルカリiOSの構成 ViewControllerRequest Conclusion

Slide 14

Slide 14 text

全てのモジュールは Kit/Entityをimport アプリは全ての モジュールをimport     MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3

Slide 15

Slide 15 text

Microframeworks Pros project.pbxproj swift internal 無用な共通化がなくなる

Slide 16

Slide 16 text

Microframeworks Cons 循環依存 Dynamic linking time Bundle Some OSS not support

Slide 17

Slide 17 text

Microframeworks Cons 循環依存 Dynamic linking time Bundle Some OSS not support

Slide 18

Slide 18 text

    MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3 ItemDetailはSearchを import出来ない

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 resources Mercari from EnvironmentProvider EnvironmentProvider User GetProfileRequest MercariEnvironment

Slide 21

Slide 21 text

    MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3 Requestの定義 型クラス 型 実装 DIP(Dependency inversion principle) protocol struct function

Slide 22

Slide 22 text

Agenda What’s New in mercari/Mew 技術的負債/技術的資産 メルカリ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 defines 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 コードは参照できない 機能は正しく動いている

Slide 35

Slide 35 text

    MercariKit     MercariEntity     Prod1     Listing     ItemDetail     Search     Mercari     Prod2     Prod3 ViewControllerRequest ViewControllers IO WrapperOfObjC _人人人人人人人人_ > 莫大な埋蔵金 <  ̄Y^Y^Y^Y^Y^Y^Y^ ̄

Slide 36

Slide 36 text

Agenda What’s New in mercari/Mew 技術的負債/技術的資産 メルカリiOSの構成 ViewControllerRequest Conclusion

Slide 37

Slide 37 text

Conclusion frameworkを分ける 責務を分けて負債を資産に変換する そのために型を上手く定義する

Slide 38

Slide 38 text

No content