SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
Борьба с ветряными мельницами
●  MVC/MVP/MVVM
●  RxJava
●  EventBus
public class SuperPuperActivity extends Activity {
private void onSomeButtonClicked() {
new AsyncTask<Void, Void, Bitmap>() {
protected Bitmap doInBackground(Void... params) {
return downloadSashaGreyPhoto();
}
protected void onPostExecute(Bitmap bitmap) {
showPhoto(bitmap);
}
}.execute();
}
private Bitmap downloadSashaGreyPhoto() {...}
private void showPhoto(Bitmap bitmap) {...}
}
Как нам поможет MVP?
public class PhotoDownloader {
public interface DownloadCallback {
void onDownloaded(Bitmap bitmap);
}
public void downloadSashaGreyPhoto(DownloadCallback callback) {
//...
callback.onDownloaded(bitmap);
}
}
public class SuperPuperActivity extends Activity {
private PhotoDownloader downloader = //some magic goes here;
private void onSomeButtonClicked() {
downloader.downloadGreyPhoto(new PhotoDownloader.DownloadCallback() {
public void onDownloaded(final Bitmap bitmap) {
runOnUiThread(() -> showPhoto(bitmap));
}
});
}
private void showPhoto(Bitmap bitmap) {...}
}
Время жизни результата (состояния)
1. Запретить поворот и не хранить состояние.
2. Сбрасывать состояние при повороте и не хранить состояние.
3. Сохранять состояние на время поворота.
4. Сохранять состояние на время жизни процесса.
5. Сохранять состояние даже при перезапуске процесса.
6. Сохранять состояние при перезапуске процесса, включая
промежуточные результаты.
public void addListener(DownloadListener listener) {
listeners.add(listener);
}
public void removeListener(DownloadListener listener) {
listeners.remove(listener);
}
private void notifyPhotoDownloaded(Bitmap bitmap) {
for (DownloadListener listener : listeners) {
listener.onDownloaded(bitmap);
}
}
private Bitmap cachedPhoto;
public void attachListener(DownloadListener listener) {
Bitmap bitmap = cachedPhoto;
if (bitmap != null) {
listener.onDownloaded(bitmap);
}
listeners.add(listener);
}
public void downloadSashaGreyPhoto() {
executor.execute(new Runnable() {
public void run() {
downloadSashaGreyPhotoSync();
}
});
}
private void downloadSashaGreyPhotoSync() {
//...
runOnUiThread(new Runnable() {
public void run() {
cachedPhoto = bitmap;
notifyPhotoDownloaded(bitmap);
}
});
}
private final PhotoDownloader.DownloadListener listener = new PhotoDownloader.DownloadListener() {
@Override
public void onDownloaded(Bitmap bitmap) {
showPhoto(bitmap);
}
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
downloader.attachListener(listener);
}
protected void onDestroy() {
super.onDestroy();
downloader.removeListener(listener);
}
private void onSomeButtonClicked() {
downloader.downloadSashaGreyPhoto();
}
private PhotoDownloader downloader = //some magic goes here;
private PhotoDownloader downloader = PhotoDownloader.getInstance();
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mail.Ru Group
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mail.Ru Group
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mail.Ru Group

Mais conteúdo relacionado

Mais procurados

Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Глеб Тарасов
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Глеб Тарасов
 

Mais procurados (9)

Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
 
Build a VR Pawn with Unreal Engine Luis Cataldi Russian
Build a VR Pawn with Unreal Engine   Luis Cataldi RussianBuild a VR Pawn with Unreal Engine   Luis Cataldi Russian
Build a VR Pawn with Unreal Engine Luis Cataldi Russian
 
Gwt jug basic
Gwt jug basicGwt jug basic
Gwt jug basic
 
Модульная структура
Модульная структураМодульная структура
Модульная структура
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
 
Как приручить реактивное программирование в XAML приложениях
Как приручить реактивное программирование в XAML приложенияхКак приручить реактивное программирование в XAML приложениях
Как приручить реактивное программирование в XAML приложениях
 
Как приручить реактивное программирование
Как приручить реактивное программированиеКак приручить реактивное программирование
Как приручить реактивное программирование
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
 

Destaque

Destaque (16)

«JMM в Android», Максим Ефимов, Redmadrobot
«JMM в Android», Максим Ефимов, Redmadrobot«JMM в Android», Максим Ефимов, Redmadrobot
«JMM в Android», Максим Ефимов, Redmadrobot
 
«Взломать за 60 секунд», Артем Кулаков, Redmadrobot
«Взломать за 60 секунд», Артем Кулаков, Redmadrobot«Взломать за 60 секунд», Артем Кулаков, Redmadrobot
«Взломать за 60 секунд», Артем Кулаков, Redmadrobot
 
Tarea 2
Tarea 2Tarea 2
Tarea 2
 
Presentació TDR: guanyem la lluita contra el càncer amb la detecció precoç
Presentació TDR: guanyem la lluita contra el càncer amb la detecció precoçPresentació TDR: guanyem la lluita contra el càncer amb la detecció precoç
Presentació TDR: guanyem la lluita contra el càncer amb la detecció precoç
 
Act. 1. Unidad 2.
Act. 1. Unidad 2.Act. 1. Unidad 2.
Act. 1. Unidad 2.
 
el documento
el documentoel documento
el documento
 
Research: The impact of solar panels on the Urban Heat Island effect (Dutch)
Research: The impact of solar panels on the Urban Heat Island effect (Dutch)Research: The impact of solar panels on the Urban Heat Island effect (Dutch)
Research: The impact of solar panels on the Urban Heat Island effect (Dutch)
 
Actividad 1. unidad 2.
Actividad 1. unidad 2.Actividad 1. unidad 2.
Actividad 1. unidad 2.
 
App coordinators in iOS
App coordinators in iOSApp coordinators in iOS
App coordinators in iOS
 
Manual del usuario oswaldo gutierrez 26005202
Manual del usuario oswaldo gutierrez 26005202Manual del usuario oswaldo gutierrez 26005202
Manual del usuario oswaldo gutierrez 26005202
 
Value Of Pre Employement Background Checks For Small-Business
Value Of Pre Employement Background Checks For Small-BusinessValue Of Pre Employement Background Checks For Small-Business
Value Of Pre Employement Background Checks For Small-Business
 
Tuberculosis
TuberculosisTuberculosis
Tuberculosis
 
Textos expositivos
Textos expositivosTextos expositivos
Textos expositivos
 
Aspectos éticos. Novedades RD 1090/2015
Aspectos éticos. Novedades RD 1090/2015Aspectos éticos. Novedades RD 1090/2015
Aspectos éticos. Novedades RD 1090/2015
 
Psoriasis
PsoriasisPsoriasis
Psoriasis
 
Suturas USC
Suturas USCSuturas USC
Suturas USC
 

Semelhante a «Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mail.Ru Group

ES2015+: давно пора!
ES2015+: давно пора!ES2015+: давно пора!
ES2015+: давно пора!
Vitebsk Miniq
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Глеб Тарасов
 
Знакомство с Papervision3d
Знакомство с Papervision3dЗнакомство с Papervision3d
Знакомство с Papervision3d
Igor Ruzanov
 
JavaScript. Event Model (in russian)
JavaScript. Event Model (in russian)JavaScript. Event Model (in russian)
JavaScript. Event Model (in russian)
Mikhail Davydov
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
Ivan Filimonov
 

Semelhante a «Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mail.Ru Group (20)

"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)
 
ES2015+: давно пора!
ES2015+: давно пора!ES2015+: давно пора!
ES2015+: давно пора!
 
Techtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real lifeTechtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real life
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
 
Андрей Юткин. Media Picker — to infinity and beyond
Андрей Юткин. Media Picker — to infinity and beyondАндрей Юткин. Media Picker — to infinity and beyond
Андрей Юткин. Media Picker — to infinity and beyond
 
"FRP — делаем жизнь проще", Трдат Мкртчян, MoscowJS 19
"FRP — делаем жизнь проще", Трдат Мкртчян, MoscowJS 19"FRP — делаем жизнь проще", Трдат Мкртчян, MoscowJS 19
"FRP — делаем жизнь проще", Трдат Мкртчян, MoscowJS 19
 
Знакомство с Papervision3d
Знакомство с Papervision3dЗнакомство с Papervision3d
Знакомство с Papervision3d
 
Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
 
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 
Yii: миграции и инсталляции
Yii: миграции и инсталляцииYii: миграции и инсталляции
Yii: миграции и инсталляции
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehave
 
Droidcon Moscow 2015. Dagger2 практический ликбез по работе с кинжалами. Дмит...
Droidcon Moscow 2015. Dagger2 практический ликбез по работе с кинжалами. Дмит...Droidcon Moscow 2015. Dagger2 практический ликбез по работе с кинжалами. Дмит...
Droidcon Moscow 2015. Dagger2 практический ликбез по работе с кинжалами. Дмит...
 
Введиние в разработку 3D игр для Nokia Asha телефонов
Введиние в разработку 3D игр для Nokia Asha телефоновВвединие в разработку 3D игр для Nokia Asha телефонов
Введиние в разработку 3D игр для Nokia Asha телефонов
 
Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектирования
 
JavaScript. Event Model (in russian)
JavaScript. Event Model (in russian)JavaScript. Event Model (in russian)
JavaScript. Event Model (in russian)
 
Documents in JavaScript
Documents in JavaScriptDocuments in JavaScript
Documents in JavaScript
 
Человекопонятные отчёты
Человекопонятные отчётыЧеловекопонятные отчёты
Человекопонятные отчёты
 
Веселая ферма. Соседи.
Веселая ферма. Соседи.Веселая ферма. Соседи.
Веселая ферма. Соседи.
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
 

Mais de Mail.ru Group

AMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей ПешковAMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей Пешков
Mail.ru Group
 

Mais de Mail.ru Group (20)

Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
 
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
 
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир ДубровинДругая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
 
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
 
Управление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон ВикторовУправление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон Викторов
 
DAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваDAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга Свиридова
 
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
 
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
 
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidiaRAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
 
WebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий ОстапенкоWebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий Остапенко
 
AMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей ПешковAMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей Пешков
 
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила СтрелковКак мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
 
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
 
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.ТаксиМетапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
 
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
 
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
 
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
 
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
 
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
 

«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mail.Ru Group

  • 1. Борьба с ветряными мельницами
  • 2.
  • 4.
  • 5. public class SuperPuperActivity extends Activity { private void onSomeButtonClicked() { new AsyncTask<Void, Void, Bitmap>() { protected Bitmap doInBackground(Void... params) { return downloadSashaGreyPhoto(); } protected void onPostExecute(Bitmap bitmap) { showPhoto(bitmap); } }.execute(); } private Bitmap downloadSashaGreyPhoto() {...} private void showPhoto(Bitmap bitmap) {...} }
  • 7.
  • 8.
  • 9. public class PhotoDownloader { public interface DownloadCallback { void onDownloaded(Bitmap bitmap); } public void downloadSashaGreyPhoto(DownloadCallback callback) { //... callback.onDownloaded(bitmap); } }
  • 10. public class SuperPuperActivity extends Activity { private PhotoDownloader downloader = //some magic goes here; private void onSomeButtonClicked() { downloader.downloadGreyPhoto(new PhotoDownloader.DownloadCallback() { public void onDownloaded(final Bitmap bitmap) { runOnUiThread(() -> showPhoto(bitmap)); } }); } private void showPhoto(Bitmap bitmap) {...} }
  • 11. Время жизни результата (состояния) 1. Запретить поворот и не хранить состояние. 2. Сбрасывать состояние при повороте и не хранить состояние. 3. Сохранять состояние на время поворота. 4. Сохранять состояние на время жизни процесса. 5. Сохранять состояние даже при перезапуске процесса. 6. Сохранять состояние при перезапуске процесса, включая промежуточные результаты.
  • 12. public void addListener(DownloadListener listener) { listeners.add(listener); } public void removeListener(DownloadListener listener) { listeners.remove(listener); } private void notifyPhotoDownloaded(Bitmap bitmap) { for (DownloadListener listener : listeners) { listener.onDownloaded(bitmap); } }
  • 13. private Bitmap cachedPhoto; public void attachListener(DownloadListener listener) { Bitmap bitmap = cachedPhoto; if (bitmap != null) { listener.onDownloaded(bitmap); } listeners.add(listener); }
  • 14. public void downloadSashaGreyPhoto() { executor.execute(new Runnable() { public void run() { downloadSashaGreyPhotoSync(); } }); } private void downloadSashaGreyPhotoSync() { //... runOnUiThread(new Runnable() { public void run() { cachedPhoto = bitmap; notifyPhotoDownloaded(bitmap); } }); }
  • 15. private final PhotoDownloader.DownloadListener listener = new PhotoDownloader.DownloadListener() { @Override public void onDownloaded(Bitmap bitmap) { showPhoto(bitmap); } }; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); downloader.attachListener(listener); } protected void onDestroy() { super.onDestroy(); downloader.removeListener(listener); } private void onSomeButtonClicked() { downloader.downloadSashaGreyPhoto(); }
  • 16. private PhotoDownloader downloader = //some magic goes here;
  • 17. private PhotoDownloader downloader = PhotoDownloader.getInstance();