11. Let’s look at entities
class Tweet {
String text;
int favorite_count;
String author;
int author_followers;
}
class Profile {
String screen_name;
String name;
String location;
int statuses_count;
int followers_count;
}
class UserWithTweet {
Profile profile;
Tweet tweet;
}
26. ▸ API is big (150+ methods to remember)
▸ Requires to understand underlying magic
▸ Hard to debug
▸ Don’t forget about back pressure
Conclusions: pitfalls
27. ▸ It is functional, it is reactive*
▸ Good for integration scenarios
▸ Allows to control execution threads
▸ Easy to compose workflows
▸ Easy to integrate into existing solutions
▸ Easy to test
* RxJava is inspired by FRP (Functional Reactive Programming), but doesn’t implement it
Conclusions: strength
Добрий деньЗвати Ігор
Сьогодні за 15 ха розкажу про RxJava
ТУТ ЛІНК НА ПРЕЗЕНТАШКУ
Тим часом:
GL
Працюю з Java 7 років
МЕТА: заціквити, підштовхнути до Реактивщини
Ще одне: прошу НЕНАГАЛЬНІ питання запам’ятовувати, їх ми обговоримо вкінці.
Спрощено виглядає сучасна апа
БАГАТО: даних, клієнтів, різних API, зовнішніх сервісів
як це менеджити?
ДЛЯ ЦЬОГО Є КУПА РІШЕНЬНАСПРАВДІ ЇХ БІЛЬШЕ
цікавить - цей ЗВІРЬОК
Хтось працював з RxJava?
З іншими РЕАКТИВНИМИ системами?
Ідея не нова
В ТАБОРІ ВОРОГІВ з 2009
Потім був порт на JS
Завдяки БЕНУ КРІСТІНСЕНУ з Netflix
Є порти під інші мови
Спробуємо реалізувати таке
Зверху рядок слів, які нас цікавлять в твітах
Зліва - потік цих твітів
Справа - топ автори і їх топ твіти
Трохи штучно, для демо згодиться
БУДЕМО ВИКОРИСТОВУВАТИ
Stream API - бібліотека від twitter
2 REST запита: профіль і недавні твіти
Коротко - PUSH ільтернатива Java 8 Stream API
Дуже схожі
ГЛЯНЕМО потік твітів -> популярний твіт популярного автора
Коротко - PUSH ільтернатива Java 8 Stream API
Дуже схожі
ГЛЯНЕМО потік твітів -> популярний твіт популярного автора
Доменні об’єкти
ТВІТ (+ деяка інфа про автора)
ПРОФІЛЬ (зовсім кілька атрибутів)
КОНТЕЙНЕР - тримати разом
ганятимемо через Observable потоки
Marble Diagrams - ВІЗУАЛІЗАЦІЯ
1. Просто потік твітів (+ автор)
2. Порівнюємо з допоки найпопюлярнішим автором і замінюємо популярнішим
3. Фільтруємо унікальні
4. Залишимо лише ім’я автора
5. По імені -> профіль + список остінніх твітів (REST API)
6. список остінніх твітів -> популярний твіт (reduce)
7. ПАРАЛЕЛЬНО
8. Зібрати дані повенути як тільки готові дочірні
9. FLATMAP -> верне результат
10. СКЛАДНО?
11. Почнем з простого - витягнемо профіль
Цей код робочий))
АСИНХРОННО?
ЩО ЗМІНИЛОСЬ?
При виклику методу код не виконається - РЕЄСТРАЦІЯ дії
1. Обробка помилок
2. Додаткова дія коли цей потік закінчиться
Note: рішення про помилку робиться в момент виклику методу!
Нічого складного?
Ну що, зробимо паралельно?
До речі такий пістолет дійно існує:
Італійська конпанія Arsenal Firearms з 2011 року робить такі іграшкиПри чому в кількох калібрах)))
Ми бачили як дістати ПРОФІЛЬ
Припустимо що так само - ТВІТИ
Тре зрозуміти як зробити це паралельно
Note: перший твіт, а не найпопулярніший
ВИПРАВИМО
Ось цю частину ми реалізували
Спробує опанувати решту
Для цього підпишимось на ПОТІК
Нам треба:
1. Stream Client - вертає потік твітів
2. Але у нас є проблема - мало твітів!
3. Рішення просте
Ось так
Ось повне рішення!
ПРАВДА БАГАТО - 17 рядків коду?
Порівняємо з діаграмою - має бути щось схоже!
Ось повне рішення!
ПРАВДА БАГАТО - 17 рядків коду?
Порівняємо з діаграмою - має бути щось схоже!
ЩЕ РАЗ НАЗАД - ДЛЯ ПОРІВНЯННЯ
ОК, підіб’ємо підсумки?
RxJava - Compositional Event Systems (CES)
Різниця у формальному визначенні, для нас це не важливо
Думали усе?
Я ж сказав що легко тестити!
TestSubscriber - частина RxJava
TestScheduler - для генерації певних подій
СПОДІВАЮСЬ ВИ ПОБАЧИЛИ: RxJava це круто
Ну от, така от RxJava за 20 хв.
Готовий відповісти на питання, маємо 3-5 хв.
2-3 питання
Останнє питання: у нас ще одна презентація