Slide 1

Slide 1 text

App Architecture by Manual DI @yoshikuni_kato SwiftѪ޷ձ vol23 2017/09/20 1

Slide 2

Slide 2 text

Who am I ? • Yoshikuni KatoʢՃ౻༝܇ʣ @yoshikuni_kato • iOS Engineerʢ2.5 yearsʣ • Yahoo! Japan -> OHAKO • Radi-Hey → 2

Slide 3

Slide 3 text

Presentation at iOSDC 2017 1 1 https://speakerdeck.com/yoching/guan-shu-woyin-shu-tositedu-sushu-kifang-falsepointo 3

Slide 4

Slide 4 text

Self Introduction - Interests • Software Design • App Architecture Patterns • Test • Functional Reactive Programming (ReactiveSwift) • Functional Approach • UI Implementation • AutoLayout (priority / ...) • UIStackView • UIViewPropertyAnimator • Custom Transition 4

Slide 5

Slide 5 text

Self Introduction - Few experiences • Older OS • Objective-C • Maintenance / Operation • DB Management • CoreAnimation / CoreGraphics 5

Slide 6

Slide 6 text

App Architecture by Manual DI 6

Slide 7

Slide 7 text

Sample Code • yoching/iOSAppArchitectureSample 2 2 https://github.com/yoching/iOSAppArchitectureSample 7

Slide 8

Slide 8 text

Past Architecture • MVVM-C • ը໘ભҠͷ؅ཧͱMVVM 3 • Coordinatorύλʔϯͷ࣮ફ 4 4 https://speakerdeck.com/yoching/coordinatorpatanfalseshi-jian 3 https://speakerdeck.com/yoching/hua-mian-qian-yi-falseguan-li-tomvvm 8

Slide 9

Slide 9 text

https://speakerdeck.com/yoching/hua-mian-qian-yi-falseguan-li-tomvvm 9

Slide 10

Slide 10 text

Past Architecture Problems • 2 tasks in Coordinator • View Transition • Dependency Injection • hard to test • cannot replace with stub objects 10

Slide 11

Slide 11 text

Inspirations • Minimizing Decision Fatigue to Improve Team Productivity @ try! swift 2017 5 • Application / UI / Components (Project Organization) • ґଘੑͷ஫ೖʢDependency Injection) @ wikipedia 6 • खಈͰͷDI / ࣗಈతͳDI • Deep Linking at Kickstarter @ SwiftTalk 7 • Routing logics 7 https://talk.objc.io/episodes/S01E49-deep-linking-at-kickstarter 6 https://ja.wikipedia.org/wiki/%E4%BE%9D%E5%AD%98%E6%80%A7%E3%81%AE%E6%B3%A8%E5%85%A5 5 https://www.slideshare.net/DerekLee/minimizing-decision-fatigue-to-improve-team-productivity 11

Slide 12

Slide 12 text

Architecture 12

Slide 13

Slide 13 text

2 Types of Objects • Runtime Objects • several objects for app runtime • testable (all dependencies are injected) • Dependency Management • doing Dependency Injection • no need to test (like setting file) 13

Slide 14

Slide 14 text

Sample Code • yoching/iOSAppArchitectureSample 2 2 https://github.com/yoching/iOSAppArchitectureSample 14

Slide 15

Slide 15 text

Development Workflow situation workflow make service make service -> update components make view make VC & VM -> make function at ViewFactory make transition update coordinator 15

Slide 16

Slide 16 text

Result • Coordinator: only view transition • Factory & Components: Dependency Injection • No Singleton! • App / Components / UI is good for object organizing (not only folder structures) 16

Slide 17

Slide 17 text

Thank you! 17