Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

View

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Store

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

Page

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Store Page View Dependency rule

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

How it works?

Slide 13

Slide 13 text

Store extension example

Slide 14

Slide 14 text

Store

Slide 15

Slide 15 text

Base pages

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Bind with RxSwift

Slide 21

Slide 21 text

Bind operator ||>

Slide 22

Slide 22 text

Bind operator <||>

Slide 23

Slide 23 text

Before: After:

Slide 24

Slide 24 text

Navigation

Slide 25

Slide 25 text

UIViewController Page User action

Slide 26

Slide 26 text

UIViewController Page User action Next Page Controller Navigator

Slide 27

Slide 27 text

UIViewController Page User action Next Page Controller Navigator Router Next Page

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Router (first vision)

Slide 31

Slide 31 text

Protocols for binding page and UIViewControllers

Slide 32

Slide 32 text

Controller creation

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

Questions