4.04M
Категория: ИнформатикаИнформатика

Навигация в Android с Kotlin. GDG Mobile Meetup Izhevsk, 20/02

1.

GDG Mobile Meetup
Izhevsk, 20/02

2.

Навигация в Android
с Kotlin
/
Упоров Дмитрий
Руководитель отдела мобильной разработки, ЦВТ

3.

Master-details

4.

Java - Junior way
Минусы:
-
Дублирование, многословность
-
Неочевиден контракт передачи данных

5.

Java - The way: Factory-method

6.

Java - The way
Плюсы:
● Лаконичность вызова
Минусы:
-
Неочевидность
Boilerplate code
Нагрузка статикой, нарушение SR
start(this)???

7.

Java -> Kotlin

8.

Java -> Kotlin

9.

Kotlin - a way
-
̶ ̶е̶о̶ч̶е̶в̶и̶д̶н̶о̶с̶т̶ь̶
Н
Boilerplate code
Нагрузка статикой, нарушение SR

10.

Kotlin - better way
-
Boilerplate code
̶Н̶а̶г̶р̶у̶з̶к̶а̶ ̶с̶т̶а̶т̶и̶к̶о̶й̶,̶ ̶н̶а̶р̶у̶ш̶е̶н̶и̶е̶ ̶S̶R̶

11.

Kotlin - better way

12.

Kotlin - better way

13.

Kotlin - The best way
Decompiled byte-code:

14.

Intent
delivery

15.

16.

Model wrapping - pervy’ blin komom
Обертка над каждой моделью:
Плюсы:
-
Инкапсуляция
Читабельность
Минусы:
-
Boilerplate
Несколько объектов одного типа

17.

Model wrapping - pervy’ blin komom
Плюсы:
-
Единая точка обработки
Расширяемость (ха-ха)
Минусы:
-
Необходимость расширения
RuntimeException
Неоформляемо

18.

19.

20.

КОДОГЕНЕРА
ЦИЯ!!1! >:D

21.

22.

Model wrapping - Wrong way

23.

Annotation processor

24.

Model wrapping - Wrong way

25.

Java Mirror API

26.

APT == MirrorAPI != Reflection
-
Нет информации о реализованных интерфейсах
-
Нет ограничения реализации “Или то, или другое”
Нет гарантии, что пользователь подставит в аннотацию свой класс
Невозможно явно сказать пользователю, что мы хотим от него
реализации интерфейса

27.

28.

“Используй дженерики..”

29.

Kotlin - Wrapped model getting
-
RuntimeException

30.

There is way to avoid RuntimeException?
No way, but...

31.

Input
Any?
Parcelable
Serializable

32.

Model wrapping - Kotlin better way

33.

How to filter Serializable or
Parcelable?
-
Перегрузка метода == ограничение всех параметров одним
интерфейсом
Ограничения реализации “Или то, или другое” (невозможно)
2 массива: Serializable и Parcelable. Ограниченный порядок аргументов

34.

Model wrapping - Kotlin the best way

35.

Model wrapping - Kotlin the best way

36.

Improvements time

37.

Improvements time

38.

Improvements time

39.

Improvements time

40.

Kotlin magic time

41.

Improvements time

42.

Success!

43.

Improvements time 2

44.

Improvements time 2

45.

Success 2!

46.

Improvements time 3 - ArgumentWithKey

47.

Improvements time 4: Intent.() -> Unit

48.

Improvements time 5: Other components
Fragment way:
Service way:
to be continued..

49.

50.

51.

Спасибо за внимание!
/
Упоров Дмитрий
Руководитель отдела мобильной разработки, ЦВТ
English     Русский Правила