Дмитрий Кулижников

Post on 12-Apr-2017

550 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Реактивные грабли

Дмитрий Кулижников

Руководитель группы разработки

2ГИС

2

0:04 -3:58

Two WeeksFKA Twigs – LP1

42%Sketch 9:41 AM

3

4

ReactiveCocoa RxJava Rx.NET

Грабли одни и те же

5

Сигнал

6

2 3 5 7

7

A

CancelA

Идея реактивного подхода

Идея реактивного подхода

8

A

CancelAr

Ar

Идея реактивного подхода

9

A

CancelArt

Ar Art

Идея реактивного подхода

10

A

CancelArte

Ar Art Arte

Идея реактивного подхода

11

CancelArtem

A Ar Art Arte Artem

12

Cancel

Apple

Artem

Artur

A textSignal

contactsSignal

13

A Ar Art Arte Artem

map (name -> findContacts(name))

Apple, Artem, Artur

Artem, Artur ArtemArtem,

Artur Artem

distinctUntilChanged

Apple, Artem, Artur

Artem, Artur Artem

Преимущества

14

• Унификация обработки событий

Преимущества

15

• Унификация обработки событий

• Создание новых сигналов на основе существующих

Где грабли?

16

Жизненный цикл

17

18

1 1 3 7 7

1 1 3 7 7

1 1 3 7 7

error

completed

takeUntil:willDeallocSignal

YES NO YES

subscribeNext

apiRequest(…)

19

YES NO YES NO

dealloc()

Жизненный цикл

20

• Риск выжрать весь трафик пользователя

• Деградация производительности

Hot & Cold

21

Cold

22

1 3 42 5

subscribeNext

1 2 3

subscribeNext

4 15 2 3 4 5

Hot

23

A Art ArteAr Artem

subscribeNext

Arte Artem

cache:1

24

A Art ArteAr Artem

subscribeNext

Arte ArtemArt

Multicast connection

25

publish

1 3 7

subscribeNext, subscribeNext

connect

Hot & Cold

26

• Риск выжрать весь трафик пользователя

• Деградация производительности

Документация и исходники

27

28

1 2 7 3

toArray

[1, 2, 7, 3]

completed

1 3 7

29

distinctUntilChanged

1 1 3 7 7

30

1

delay:5

take:1

1

1

31

1 2 7 3

A B

2A 7A 7B 3B

combineLatest

Документация и исходники

32

• Риск потерять дни в дебаггере и гугле

• Использование дополнительной памяти

Архитектура

33

Subject

• Сигнал

34

Subject

• Сигнал

• Связывает императивный код с реактивным

35

Subject

• Сигнал

• Связывает императивный код с реактивным

• Обладает публичными методами

• sendNext

• sendError

• sendCompleted

36

Subject

• Subject торчит наружу в публичном интерфейсе

37

Subject

• Subject торчит наружу в публичном интерфейсе

• Подписка на Subject внутри императивного кода

38

Реактивщина не для всего

39

40

0:04 -3:58

Two WeeksFKA Twigs – LP1

42%Sketch 9:41 AM

0:04 -3:58

Two WeeksFKA Twigs – LP1

42%Sketch 9:41 AM

Заключение

• Разберитесь с идеей реактивщины до ее использования

41

Заключение

• Разберитесь с идеей реактивщины до ее использования

• Читайте документацию и исходники

42

Заключение

• Разберитесь с идеей реактивщины до ее использования

• Читайте документацию и исходники

• Не используйте реактивный подход везде подряд

43

Заключение

• Разберитесь с идеей реактивщины до ее использования

• Читайте документацию и исходники

• Не используйте реактивный подход везде подряд

• Будьте реактивнее

44

@renascence

Дмитрий Кулижников

Руководитель группы разработки

2ГИС

Вопросы?

kulizhnikov@gmail.com

45

top related