Upgrade to Pro — share decks privately, control downloads, hide ads and more …

App Architecture By Manual DI

App Architecture By Manual DI

@ 集まれSwift好き!Swift愛好会 vol23
https://love-swift.connpass.com/event/63840/

Yoshikuni Kato

September 20, 2017
Tweet

More Decks by Yoshikuni Kato

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  6. App Architecture by Manual DI
    6

    View Slide

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

    View Slide

  8. 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

    View Slide

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

    View Slide

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

    View Slide

  11. 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

    View Slide

  12. Architecture
    12

    View Slide

  13. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. Thank you!
    17

    View Slide