SlideShare a Scribd company logo
"Переход от коллбеков к
событиям"
Веретенников А.
Семаков И.
Задача: разработать frontend-часть для
нового проекта заказчика
Public API
BackendFrontend
AJAX
Задача: разработать frontend-часть для
нового проекта заказчика
Frontend
Задача: разработать frontend-часть для
нового проекта заказчика
Пути решения
Callback
Задача: разработать frontend-часть для
нового проекта заказчика
Пути решения
Event-driven
Задача: разработать frontend-часть для
нового проекта заказчика
Пути решения
Callback Event-driven
?
Callback
Сначала все выглядит вот так
Component_1 = {
update : function( callback ){ callback() },
reset : function( callback ){ callback() }
};
Component_2 = {
business : function(){
Component_1.update(Component_2.callback);
},
callback : function(){ ... }
};
Callback
Появляются новые требования
Component_1 = {
update : function( callback ){ callback() },
reset : function( callback ){ callback() }
};
Component_2 = {
business : function(){
Component_1.update(Component_2.callback);
},
callback : function(){ ... }
};
Component_3 = {
business : function(){
Component_1.reset(Component_3.callback);
},
callback : function(){ ... }
};
Callback
... и еще:
Component_1 = {
update : function( callback ){ callback() },
reset : function( callback ){ callback() }
};
Component_2 = {
business : function(){
Component_1.update(Component_2.callback);
},
callback : function(){ ... }
};
Component_3 = {
business : function(){
Component_1.reset(Component_3.callback);
},
callback : function(){ ... }
};
Component_4 = {
business : function(){
Component_2.business();
}
};
Callback
.. а в итоге получаем
Callback
Хорошо работают на несложных проектах
Слабая гибкость из-за постоянно возрастающих
зависимостей
Event-driven. Теория
Event-driven. Теория
<ОБРАЗЕЦ КОДА>
Event-driven. Практика
С точки зрения кода Manager - тот же
Module
В нашем случае, часть функций
менеджера выполняется jQuery
Другая часть выполняется одним из
компонентов
Manager "размазало" по коду :)
Но дискомофорта из-за этого не испытываем
Event-driven. Практика
Шина
Непосредственно на компоненте
Специально созданный объект (proxy)
Генерируем сразу на компоненте.
Избавились от посредников
Вызов событий
Event-driven. Практика
События привязаны к компонентам.
Некоторые события существуют вне
компонентов (один элемент - один
эвент - несколько компонентов)
Разные компоненты могут вызывать один и тот же эвент
Проблема зоны видимости событий
Event-driven. Практика
Каждому источнику - уникальное
событие
Передавать источник события
Источник события — параметр события
Кто вызвал событие на компоненте?
Event-driven. Практика
Получатель - не всегда источник.
Каждому получателю - уникальное
событие
Передавать получателя
Получатель события - параметр события
Для кого предназначено событие?
Event-driven. Практика
Как быть с дефолтными событиями?
Как быть с событиями конкретных
компонентов?
Что делать с общими событиями?
Имена события - параметризуемые.
Проблема именования событий
Event-driven. Практика
Событие предназначено для связывания
компонентов
Компонент слушает сам себя
Кто кого: метод вызывает событие или же событие вызывает метод?
Проблемы внутри компонента
Event-driven. Итоги
Одинаково работают на любых проектах
Меньше зависимостей, больше гибкости
Лучшая отказоустойстойчивость
Сложность восприятия
Забыть нельзя использовать

More Related Content

PPTX
Angular 2 vs Angular 1
PPTX
SECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения Agile
DOC
FOREX Signals and Daily Technical Report
PDF
SECON'2014 - Андрей Устюжанин - Маленькие секреты больших данных
PDF
SECON'2014 - Сергеев Антон - Асинхронные задачи в iFunny
PDF
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
PPTX
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
PDF
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...
Angular 2 vs Angular 1
SECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения Agile
FOREX Signals and Daily Technical Report
SECON'2014 - Андрей Устюжанин - Маленькие секреты больших данных
SECON'2014 - Сергеев Антон - Асинхронные задачи в iFunny
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...

Viewers also liked (9)

PPTX
SECON'2014 - Команда CTRL-PNZ - Уязвимости для самых маленьких. Что это, как ...
PDF
Comex Intraday pack
ODP
SECON'2014 - Сергей Цивин - Производительность веб-приложений
PDF
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
PPTX
SECON'2014 - Максим Цепков - DDD: от требований до кода
PDF
SECON'2014 - Кирилл Мокевнин - Формирование инженерной культуры
PDF
Young Marketers 5 Semi-Final - #hangxom
PDF
Young Marketers 5 Semi-Final - SYNERGY
SECON'2014 - Команда CTRL-PNZ - Уязвимости для самых маленьких. Что это, как ...
Comex Intraday pack
SECON'2014 - Сергей Цивин - Производительность веб-приложений
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
SECON'2014 - Максим Цепков - DDD: от требований до кода
SECON'2014 - Кирилл Мокевнин - Формирование инженерной культуры
Young Marketers 5 Semi-Final - #hangxom
Young Marketers 5 Semi-Final - SYNERGY
Ad

Similar to SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям (20)

PDF
Антон Веретенников и Илья Семаков. Презентация
PPT
CodeFest 2010. Высоцкий С. — Автоматизация тестирования Flex/Flash GUI
PDF
Deep Dive in Magento DI
PDF
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
PPTX
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
PPTX
Luxoft async.net
PPTX
PDF
FPUG Dzyga presentation
PDF
Паттерны быстрой разработки WPF MVVM бизнес-приложений
PPT
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
KEY
Testing RIA with Selenium
PDF
Aspect Oriented Approach
PDF
Инструментируй это
PPTX
Микрофреймворки PHP
PDF
Ember.js - Назад в Будущее - Odessa JS 2014
PPTX
Автоматизация тестирования iOS приложений: от идеи к готовому решению
PPT
Mate framework
PPT
Общая архитектура Yii2
PPTX
Антон Валюх - Использование паттерна Mvvm в android
PDF
Илья Ефимов «IoC/DI на примере Autofac»
Антон Веретенников и Илья Семаков. Презентация
CodeFest 2010. Высоцкий С. — Автоматизация тестирования Flex/Flash GUI
Deep Dive in Magento DI
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Luxoft async.net
FPUG Dzyga presentation
Паттерны быстрой разработки WPF MVVM бизнес-приложений
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
Testing RIA with Selenium
Aspect Oriented Approach
Инструментируй это
Микрофреймворки PHP
Ember.js - Назад в Будущее - Odessa JS 2014
Автоматизация тестирования iOS приложений: от идеи к готовому решению
Mate framework
Общая архитектура Yii2
Антон Валюх - Использование паттерна Mvvm в android
Илья Ефимов «IoC/DI на примере Autofac»
Ad

SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям