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

Implementation of Clean Architecture using FRP

Implementation of Clean Architecture using FRP

Talk by Daria Kovalenko

Даша расскажет о реализации принципов Clean Architecture с использованием FRP (RxSwift).
Что будет:
- решение типовых задач и проблем
- лайфхаки и операторы
Чего не будет:
- унылой теории

This talk was made for CocoaFriday #4 ( https://cocoaheads.org.ua/cocoafriday/4) which took place Jun 14, 2019

Video: https://youtu.be/bTwvSDZhs3I

CocoaHeads Ukraine

June 14, 2019
Tweet

More Decks by CocoaHeads Ukraine

Other Decks in Programming

Transcript

  1. Implementation of Clean
    Architecture using FRP
    Daria Kovalenko
    iOS Developer at Anadea

    View Slide

  2. View

    View Slide

  3. View
    - UIKit (UIViewController, UIView)
    - layouts
    - animations
    - user’s actions

    View Slide

  4. Store

    View Slide

  5. Store
    Store
    Rest
    Services
    DAOs
    Local storage Profile
    Store
    Order
    Store
    Contacts
    Store

    View Slide

  6. Store
    - fetches data from network
    - stores data in local storage
    - updates data
    - creates/deletes stores
    - switches to other stores

    View Slide

  7. Page

    View Slide

  8. Page
    - fetches data from store
    - transforms store data for presentation
    - transforms store data to subpages
    - sends updates to store
    - owns store
    - generates other pages

    View Slide

  9. Store
    Page
    View
    Dependency rule

    View Slide

  10. Why RxSwift?
    Store: Observable
    Page: Observable, BehaviorSubject
    (PublishRelay, BehaviorRelay), Action
    View: RxCocoa extensions, RxDataSources etc

    View Slide

  11. View Slide

  12. How it works?

    View Slide

  13. Store extension example

    View Slide

  14. Store

    View Slide

  15. Base pages

    View Slide

  16. View Slide

  17. View Slide

  18. View Slide

  19. View Slide

  20. Bind with RxSwift

    View Slide

  21. Bind operator ||>

    View Slide

  22. Bind operator <||>

    View Slide

  23. Before:
    After:

    View Slide

  24. Navigation

    View Slide

  25. UIViewController Page
    User action

    View Slide

  26. UIViewController Page
    User action
    Next Page
    Controller Navigator

    View Slide

  27. UIViewController Page
    User action
    Next Page
    Controller Navigator
    Router
    Next Page

    View Slide

  28. UIViewController Page
    User action
    Next Page
    Controller Navigator
    Creates next
    UIViewController
    Router
    Next Page

    View Slide

  29. UIViewController Page
    User action
    Next Page
    Controller Navigator
    Creates next
    UIViewController
    Router
    Next Page
    Presents next
    UIViewController

    View Slide

  30. Router (first vision)

    View Slide

  31. Protocols for binding page and UIViewControllers

    View Slide

  32. Controller creation

    View Slide

  33. View Slide

  34. Conclusions
    - independent layers - changes of store does not change UI and vice versa
    - different ViewControllers can be built in different ways (storyboards, nibs, pin
    layouts etc)
    - UI components can be wrapped to RxCocoa and easy binded
    - needs extra input/output models between layers
    - need to handle side effects of bindings
    - control disposeBag for binding on different type of UI - UITableViewCells,
    subviews to avoid multiple bindings

    View Slide

  35. Questions

    View Slide