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

45
Реактивные грабли Дмитрий Кулижников Руководитель группы разработки 2ГИС

Upload: codefest

Post on 12-Apr-2017

561 views

Category:

Software


0 download

TRANSCRIPT

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

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

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

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

2ГИС

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

2

0:04 -3:58

Two WeeksFKA Twigs – LP1

42%Sketch 9:41 AM

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

3

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

4

ReactiveCocoa RxJava Rx.NET

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

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

5

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

Сигнал

6

2 3 5 7

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

7

A

CancelA

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

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

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

8

A

CancelAr

Ar

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

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

9

A

CancelArt

Ar Art

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

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

10

A

CancelArte

Ar Art Arte

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

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

11

CancelArtem

A Ar Art Arte Artem

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

12

Cancel

Apple

Artem

Artur

A textSignal

contactsSignal

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

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

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

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

14

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

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

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

15

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

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

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

Где грабли?

16

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

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

17

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

18

1 1 3 7 7

1 1 3 7 7

1 1 3 7 7

error

completed

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

takeUntil:willDeallocSignal

YES NO YES

subscribeNext

apiRequest(…)

19

YES NO YES NO

dealloc()

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

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

20

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

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

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

Hot & Cold

21

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

Cold

22

1 3 42 5

subscribeNext

1 2 3

subscribeNext

4 15 2 3 4 5

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

Hot

23

A Art ArteAr Artem

subscribeNext

Arte Artem

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

cache:1

24

A Art ArteAr Artem

subscribeNext

Arte ArtemArt

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

Multicast connection

25

publish

1 3 7

subscribeNext, subscribeNext

connect

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

Hot & Cold

26

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

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

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

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

27

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

28

1 2 7 3

toArray

[1, 2, 7, 3]

completed

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

1 3 7

29

distinctUntilChanged

1 1 3 7 7

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

30

1

delay:5

take:1

1

1

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

31

1 2 7 3

A B

2A 7A 7B 3B

combineLatest

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

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

32

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

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

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

Архитектура

33

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

Subject

• Сигнал

34

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

Subject

• Сигнал

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

35

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

Subject

• Сигнал

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

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

• sendNext

• sendError

• sendCompleted

36

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

Subject

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

37

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

Subject

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

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

38

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

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

39

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

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

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

Заключение

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

41

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

Заключение

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

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

42

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

Заключение

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

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

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

43

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

Заключение

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

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

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

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

44

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

@renascence

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

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

2ГИС

Вопросы?

[email protected]

45