Об использовании подхода внедрения зависимостей (Dependency Injection) в разработке Android-приложений. Зачем это нужно и какие преимущества дает. А так же о том, как построить на основе DI гибкую архитектуру приложения.
Ивент здесь: https://plus.google.com/u/0/events/c6bh3b26o29g4k2fom09636fn00
Презентация подготовлена по материалам выступления Владислава Плясова на витебском MiniQ#23, который был проведен 27 февраля 2020 года:
https://communities.by/events/miniq-vitebsk-23 .
Про доклад:
Большинство нас слышало про такую технологию как GraphQL, но кто слышал про Apollo GraphQL Federation?
В своем докладе я бы хотел освятить следующие темы:
- GraphQL. Базовые понятия.
- Apollo Gateway. Что это за зверь и как им пользоваться. Проблема, которую он решает.
- Как создать свою "федерацию" из нескольких GraphQL сервисов.
- Какие плюшки предоставляет нам Apollo Gateway со старта.
- Ваши вопросы.
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiSoftengi
Разработка Web-приложений на Angular JS — доклад Бориса Левицкого, архитектора ПО в команде портфеля проектов Enviance компании Softengi.
Видео с докладом от автора можно посмотреть по ссылке: http://youtu.be/oTXxrmIxo8Y
Презентация ответит на вопросы:
- что такое Angular?
- для чего он используется и что с ним можно делать?
- как работает Data-Binding?
- кастомные фильтры
- структура Angular приложения
Архитектурные семинары Softengi - еженедельные встречи, на которые приглашаются ведущие разработчики/архитекторы Softengi и других компаний нашего консорциума Intecracy Group.
Все проведенные семинары мы записывали, и теперь хотим поделиться опытом и знаниями с такими же профессионалами.
Подписывайся на канал Softengi https://www.youtube.com/user/softengi и узнай первым о новых семинарах.
http://www.softengi.com
During the presentation, I've explained how to start with Angular 2 and get better results using it. Also I've told about our experience and the most important points to care about.
Презентация подготовлена по материалам выступления Владислава Плясова на витебском MiniQ#23, который был проведен 27 февраля 2020 года:
https://communities.by/events/miniq-vitebsk-23 .
Про доклад:
Большинство нас слышало про такую технологию как GraphQL, но кто слышал про Apollo GraphQL Federation?
В своем докладе я бы хотел освятить следующие темы:
- GraphQL. Базовые понятия.
- Apollo Gateway. Что это за зверь и как им пользоваться. Проблема, которую он решает.
- Как создать свою "федерацию" из нескольких GraphQL сервисов.
- Какие плюшки предоставляет нам Apollo Gateway со старта.
- Ваши вопросы.
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiSoftengi
Разработка Web-приложений на Angular JS — доклад Бориса Левицкого, архитектора ПО в команде портфеля проектов Enviance компании Softengi.
Видео с докладом от автора можно посмотреть по ссылке: http://youtu.be/oTXxrmIxo8Y
Презентация ответит на вопросы:
- что такое Angular?
- для чего он используется и что с ним можно делать?
- как работает Data-Binding?
- кастомные фильтры
- структура Angular приложения
Архитектурные семинары Softengi - еженедельные встречи, на которые приглашаются ведущие разработчики/архитекторы Softengi и других компаний нашего консорциума Intecracy Group.
Все проведенные семинары мы записывали, и теперь хотим поделиться опытом и знаниями с такими же профессионалами.
Подписывайся на канал Softengi https://www.youtube.com/user/softengi и узнай первым о новых семинарах.
http://www.softengi.com
During the presentation, I've explained how to start with Angular 2 and get better results using it. Also I've told about our experience and the most important points to care about.
Случалось ли, что вы видели (чужой) код и хотели все переписать? Бывало такое, что вы не могли понять, почему кем-то было принято конкретное решение, не другое? Хотели ли вы воскликнуть:«А я бы сделал еще круче!»?
Если вы задумывались об этом, вам будет интересно послушать историю о том, как эти вопросы возникали у Александра и Кирилла и как они решались в условиях большой компании.
Разработчики расскажут, как в самом начале пути вытаскивали шашки и шли в атаку на проблемную архитектуру. Но все оказалось не так просто, и по мере погружения в проект парни стали понимать, что архитектура большой системы — компромисс между различными подходами и решениями, инновациями и легаси (наследованным кодом), централизацией и децентрализацией компонентов. Докладчики наработали очень много опыта в решении архитектурных задач и поделятся опытом и выработанными принципами, которых придерживаются в настоящее время.
Во время доклада будут обсуждаться непростые вопросы, возникающие при принятии решений о том, как будет жить и эволюционировать система.
Вместе со слушателями Александр и Кирилл проделают упражнение по созданию «таблицы технологий» и её эволюции. Также они покажут, насколько важно инженерное решение на любой из стадий развития системы.
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
Сергей Коржнев
Архитектор версии 1.4 2ГИС Web API
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Тезисы:
● Как организован код в старой версии.
● Вдумчиво смотрим, как мы используем Yii, хватаемся за голову и клавиатуру. Там отрезаем, тут пришиваем, и вуаля!
● Ну и делаем выводы, как мы забороли две классические проблемы программирования: борьба с дублированием кода и сложностью системы.
* Почему Angular 2 такой быстрый и как его ускорить еще сильнее?
* Как работает Change Detection механизм и как им управлять?
* Зачем нам Zone.js и Функциональное Реактивное Программирование?
* Как работать с Redux и Mobx в Angular 2 и что можно от этого выиграть?
Об этом и ряде других вещей вы узнаете из этого доклада.
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Ontico
* Почему Angular 2 такой быстрый и как его ускорить еще сильнее?
* Как работает Change Detection механизм и как им управлять?
* Зачем нам Zone.js и Функциональное Реактивное Программирование?
* Как работать с Redux и Mobx в Angular 2 и что можно от этого выиграть?
Об этом и ряде других вещей вы узнаете из этого доклада.
Виктор Розаев - Как не сломать обратную совместимость в Public APIMoscowJS
Представьте что у вас есть публичный JavaScript API. Им пользуются сторонние девелоперы от Индии до Канады, чтобы писать свои облачные сервисы. Эти сервисы продают телекомуникационные компании с многомиллиардными оборотами превышающими стоимость вашей компании. Любая остановка сервиса - миллионные убытки. Представили? А нам и представлять не надо - это наша работа. Добро пожаловать в нашу реальность. В рамках доклада мы расскажем о том, как сохранить обратную совместимость при активном развитии и неизвестных пользователях, ну и причем тут вообще интерны.
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Ontico
- Что такое "чистая" архитектура приложений. Чем грозит "грязная" архитектура, чем от нее отличается "чистая" архитектура, и какой от нее профит.
- История появления VIPER.
- Идея VIPER. Как изменяется структура приложения при применении этого подхода.
- Опыт использования VIPER в Rambler&Co. Что мы изменили и добавили.
- Работа с VIPER на примере user story из реального приложения.
- Выводы: чем помогает VIPER и когда его использовать не стоит.
Сегодня многие фреймворки, такие как Prism или Autofac, позволяют разработчику организовать модульную структуру приложения. При этом часто бывает непонятно, для чего ещё нужны модули, кроме как для пресловутой "красоты архитектуры".
В рамках доклада я расскажу о том, какие существуют подходы к организации модульной структуры, в каких фреймворках они реализованы и для решения каких задач дает преимущество каждый подход.
Программируемость ACI. Примеры применения.Cisco Russia
Программируемость ACI. Примеры применения.
Запись вебинара можно найти по ссылке: http://ciscoclub.ru/tektorial-po-cod-cisco-aci-arhitektura-preimushchestva-praktika-proektirovaniya-i-vnedreniya
Случалось ли, что вы видели (чужой) код и хотели все переписать? Бывало такое, что вы не могли понять, почему кем-то было принято конкретное решение, не другое? Хотели ли вы воскликнуть:«А я бы сделал еще круче!»?
Если вы задумывались об этом, вам будет интересно послушать историю о том, как эти вопросы возникали у Александра и Кирилла и как они решались в условиях большой компании.
Разработчики расскажут, как в самом начале пути вытаскивали шашки и шли в атаку на проблемную архитектуру. Но все оказалось не так просто, и по мере погружения в проект парни стали понимать, что архитектура большой системы — компромисс между различными подходами и решениями, инновациями и легаси (наследованным кодом), централизацией и децентрализацией компонентов. Докладчики наработали очень много опыта в решении архитектурных задач и поделятся опытом и выработанными принципами, которых придерживаются в настоящее время.
Во время доклада будут обсуждаться непростые вопросы, возникающие при принятии решений о том, как будет жить и эволюционировать система.
Вместе со слушателями Александр и Кирилл проделают упражнение по созданию «таблицы технологий» и её эволюции. Также они покажут, насколько важно инженерное решение на любой из стадий развития системы.
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
Сергей Коржнев
Архитектор версии 1.4 2ГИС Web API
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Тезисы:
● Как организован код в старой версии.
● Вдумчиво смотрим, как мы используем Yii, хватаемся за голову и клавиатуру. Там отрезаем, тут пришиваем, и вуаля!
● Ну и делаем выводы, как мы забороли две классические проблемы программирования: борьба с дублированием кода и сложностью системы.
* Почему Angular 2 такой быстрый и как его ускорить еще сильнее?
* Как работает Change Detection механизм и как им управлять?
* Зачем нам Zone.js и Функциональное Реактивное Программирование?
* Как работать с Redux и Mobx в Angular 2 и что можно от этого выиграть?
Об этом и ряде других вещей вы узнаете из этого доклада.
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Ontico
* Почему Angular 2 такой быстрый и как его ускорить еще сильнее?
* Как работает Change Detection механизм и как им управлять?
* Зачем нам Zone.js и Функциональное Реактивное Программирование?
* Как работать с Redux и Mobx в Angular 2 и что можно от этого выиграть?
Об этом и ряде других вещей вы узнаете из этого доклада.
Виктор Розаев - Как не сломать обратную совместимость в Public APIMoscowJS
Представьте что у вас есть публичный JavaScript API. Им пользуются сторонние девелоперы от Индии до Канады, чтобы писать свои облачные сервисы. Эти сервисы продают телекомуникационные компании с многомиллиардными оборотами превышающими стоимость вашей компании. Любая остановка сервиса - миллионные убытки. Представили? А нам и представлять не надо - это наша работа. Добро пожаловать в нашу реальность. В рамках доклада мы расскажем о том, как сохранить обратную совместимость при активном развитии и неизвестных пользователях, ну и причем тут вообще интерны.
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Ontico
- Что такое "чистая" архитектура приложений. Чем грозит "грязная" архитектура, чем от нее отличается "чистая" архитектура, и какой от нее профит.
- История появления VIPER.
- Идея VIPER. Как изменяется структура приложения при применении этого подхода.
- Опыт использования VIPER в Rambler&Co. Что мы изменили и добавили.
- Работа с VIPER на примере user story из реального приложения.
- Выводы: чем помогает VIPER и когда его использовать не стоит.
Сегодня многие фреймворки, такие как Prism или Autofac, позволяют разработчику организовать модульную структуру приложения. При этом часто бывает непонятно, для чего ещё нужны модули, кроме как для пресловутой "красоты архитектуры".
В рамках доклада я расскажу о том, какие существуют подходы к организации модульной структуры, в каких фреймворках они реализованы и для решения каких задач дает преимущество каждый подход.
Программируемость ACI. Примеры применения.Cisco Russia
Программируемость ACI. Примеры применения.
Запись вебинара можно найти по ссылке: http://ciscoclub.ru/tektorial-po-cod-cisco-aci-arhitektura-preimushchestva-praktika-proektirovaniya-i-vnedreniya
6. О
себе
• Закончил
ОмГТУ
(АСОИУ)
• Делаю
крутые
приложения
в
Live
Typing:
• КоммерсантЪ
• Breath
Alcohol
Monitor
(by
Lapka)
• PrizeWord
сканворды
• Опросы
Департамента
транспорта
Москвы
7. О
себе
• Закончил
ОмГТУ
(АСОИУ)
• Делаю
крутые
приложения
в
Live
Typing:
• КоммерсантЪ
• Breath
Alcohol
Monitor
(by
Lapka)
• PrizeWord
сканворды
• Опросы
Департамента
транспорта
Москвы
• Участник
GDG
Omsk
8. О
себе
• Закончил
ОмГТУ
(АСОИУ)
• Делаю
крутые
приложения
в
Live
Typing:
• КоммерсантЪ
• Breath
Alcohol
Monitor
(by
Lapka)
• PrizeWord
сканворды
• Опросы
Департамента
транспорта
Москвы
• Участник
GDG
Omsk
• Огранизатор
Android
Developers
Omsk
9. О
себе
• Закончил
ОмГТУ
(АСОИУ)
• Делаю
крутые
приложения
в
Live
Typing:
• КоммерсантЪ
• Breath
Alcohol
Monitor
(by
Lapka)
• PrizeWord
сканворды
• Опросы
Департамента
транспорта
Москвы
• Участник
GDG
Omsk
• Огранизатор
Android
Developers
Omsk
• Увлечения:
космос,
спорт,
open
source
12. Внедрение
зависимостей
(Dependency
Injection)
• Набор
паттернов
и
принципов
разработки
ПО
13. Внедрение
зависимостей
(Dependency
Injection)
• Набор
паттернов
и
принципов
разработки
ПО
• Позволяют
писать
слабосвязный
код
14. Внедрение
зависимостей
(Dependency
Injection)
• Набор
паттернов
и
принципов
разработки
ПО
• Позволяют
писать
слабосвязный
код
• Является
разновидностью
более
глобального
принципа
инверсии
управления
(Inversion
of
Control)
(by
M.Fowler)
15. Внедрение
зависимостей
(Dependency
Injection)
• Набор
паттернов
и
принципов
разработки
ПО
• Позволяют
писать
слабосвязный
код
• Является
разновидностью
более
глобального
принципа
инверсии
управления
(Inversion
of
Control)
(by
M.Fowler)
• Разделяет
порождение
компонентов,
от
тех,
кто
их
запрашивает
Component Service
20. public class Component {
private final Service service;
public Component(Service service) {
this.service = service;
}
public void doStuff() {
return service.doStuff();
}
}
28. Цели
“ObjectGraph”
• Статический
анализ
всех
зависимостей
и
инъекций
• Compile-‐time
валидация
и
поиск
ошибок
• Избавиться
от
рефлексии
29. Цели
“ObjectGraph”
• Статический
анализ
всех
зависимостей
и
инъекций
• Compile-‐time
валидация
и
поиск
ошибок
• Избавиться
от
рефлексии
• Незначительные
затраты
памяти
33. Разработка
“ObjectGraph”
• 5
недель
работы
Jesse
Wilson
• Bob
Lee
в
качестве
технического
советника
• “Огромный”
boolean
switch
в
приложениях
Square
34. Разработка
“ObjectGraph”
• 5
недель
работы
Jesse
Wilson
• Bob
Lee
в
качестве
технического
советника
• “Огромный”
boolean
switch
в
приложениях
Square
• Через
2
недели
Guice
был
полностью
удален
35. Разработка
“ObjectGraph”
• 5
недель
работы
Jesse
Wilson
• Bob
Lee
в
качестве
технического
советника
• “Огромный”
boolean
switch
в
приложениях
Square
• Через
2
недели
Guice
был
полностью
удален
• Переименован
в
Dagger
36. Разработка
“ObjectGraph”
• 5
недель
работы
Jesse
Wilson
• Bob
Lee
в
качестве
технического
советника
• “Огромный”
boolean
switch
в
приложениях
Square
• Через
2
недели
Guice
был
полностью
удален
• Переименован
в
Dagger
• Выложен
в
открытый
доступ
-‐
http://github.com/
square/dagger
39. Dagger
• ObjectGraph
-‐
центральный
менеджер
зависимостей
и
инжектор
• @Module
+
@Provides
-‐
механизм
предоставления
зависимостей
40. Dagger
• ObjectGraph
-‐
центральный
менеджер
зависимостей
и
инжектор
• @Module
+
@Provides
-‐
механизм
предоставления
зависимостей
• @Inject
-‐
механизм
для
запроса
зависимостей
41. Dagger
• ObjectGraph
-‐
центральный
менеджер
зависимостей
и
инжектор
• @Module
+
@Provides
-‐
механизм
предоставления
зависимостей
• @Inject
-‐
механизм
для
запроса
зависимостей
• И
еще
немного
сахара
и
магии
:)
45. Предоставление
зависимостей
• Модули
-‐
классы,
предоставляющие
зависимости
• Для
этого
у
класса-‐модуля
используется
аннотация
@Module
• Аннотация
@Provides
у
метода
указывает,
что
возвращаемый
тип
-‐
зависимость
46. Предоставление
зависимостей
• Модули
-‐
классы,
предоставляющие
зависимости
• Для
этого
у
класса-‐модуля
используется
аннотация
@Module
• Аннотация
@Provides
у
метода
указывает,
что
возвращаемый
тип
-‐
зависимость
• @Module
и
@Provides
предназначены
использоваться
вместе
52. Инъекция
зависимостей
• Инъекция
в
конструктор:
• @Inject
у
конструктора
• Все
аргументы
конструктора
-‐
зависимости
• Зависимости
могут
быть
сохранены
в
private
и
final
полях
53. Инъекция
зависимостей
• Инъекция
в
конструктор:
• @Inject
у
конструктора
• Все
аргументы
конструктора
-‐
зависимости
• Зависимости
могут
быть
сохранены
в
private
и
final
полях
• Dagger
должен
создавать
объект
54. Инъекция
зависимостей
• Инъекция
в
конструктор:
• @Inject
у
конструктора
• Все
аргументы
конструктора
-‐
зависимости
• Зависимости
могут
быть
сохранены
в
private
и
final
полях
• Dagger
должен
создавать
объект
• Для
такого
объекта
не
требуется
@Provides
(т.е.
его
можно
использовать
как
зависимость)
55. public class Component {
private final Service service;
@Inject
public Component(Service service) {
this.service = service;
}
public void doStuff() {
return service.doStuff();
}
}
60. Инъекция
зависимостей
• Инъекция
в
поле:
• @Inject
у
полей-‐зависимостей
• Поля
не
могут
быть
private
или
final
• Инъекция
происходит
после
создания
объекта
61. Инъекция
зависимостей
• Инъекция
в
поле:
• @Inject
у
полей-‐зависимостей
• Поля
не
могут
быть
private
или
final
• Инъекция
происходит
после
создания
объекта
• Чаще
всего
объект
ответственен
за
инъекцию
самого
себя
62. public class Component {
@Inject Service service;
public Component() {
Injector.inject(this);
}
public void doStuff() {
return service.doStuff();
}
}
67. ObjectGraph
• Центральный
контроллер
модулей
(зависимотей)
• Инжектор
• Может
быть
расширен
путем
добавления
других
модулей.
• Модули
могут
переопределять
зависимости
из
других
модулей
(только
1
раз)
68. ObjectGraph og = ObjectGraph.create(
new NetworkModule(),
new TwitterModule("naghtarr")
);
'
// Using constructor injection:
TweeterApp app = og.get(TweeterApp.class);
'
// Using field injection:
TweeterApp app = new TweeterApp();
og.inject(app);
75. Как
пользоваться
в
Android
• Корневой
ObjectGraph
создается
в
подклассе
Application
76. Как
пользоваться
в
Android
• Корневой
ObjectGraph
создается
в
подклассе
Application
• Не
получится
использовать
инъекцию
в
конструктор
(объекты
создаются
ОС)
77. Как
пользоваться
в
Android
• Корневой
ObjectGraph
создается
в
подклассе
Application
• Не
получится
использовать
инъекцию
в
конструктор
(объекты
создаются
ОС)
• Используется
инъекция
в
поле
(в
Activity,
Fragment,
Service,
View)
78. Как
пользоваться
в
Android
• Корневой
ObjectGraph
создается
в
подклассе
Application
• Не
получится
использовать
инъекцию
в
конструктор
(объекты
создаются
ОС)
• Используется
инъекция
в
поле
(в
Activity,
Fragment,
Service,
View)
• Можно
делить
приложение
на
“области
видимости”
с
определенным
набором
модулей,
используя
метод
.plus()
82. Преимущества
• Mock-‐режим
для
параллельной
и
быстрой
разработки
(module
override
+
gradle
flavours)
• Тестовый
режим
для
отладки
и
функционального
тестирования
(module
override)
86. Производительность
• Генерация
кода
для
зависимостей
за
счет
Annotation
processing
• Происходит
автоматически
при
компиляции
• Не
используется
рефлексия
(почти)
87. Производительность
• Генерация
кода
для
зависимостей
за
счет
Annotation
processing
• Происходит
автоматически
при
компиляции
• Не
используется
рефлексия
(почти)
• Удобно
для
отладки
и
для
разработчиков
90. Будущее
• Dagger
2
(разрабатывается
Google
и
Square)
• Без
рефлексии…
совсем
91. Будущее
• Dagger
2
(разрабатывается
Google
и
Square)
• Без
рефлексии…
совсем
• Смерть
листингу
инъекций
92. Будущее
• Dagger
2
(разрабатывается
Google
и
Square)
• Без
рефлексии…
совсем
• Смерть
листингу
инъекций
• http://goo.gl/7eTCJu
и
http://goo.gl/mW474Z
93. Будущее
• Dagger
2
(разрабатывается
Google
и
Square)
• Без
рефлексии…
совсем
• Смерть
листингу
инъекций
• http://goo.gl/7eTCJu
и
http://goo.gl/mW474Z
• Когда?
Скоро
:)
94. Будущее
• Dagger
2
(разрабатывается
Google
и
Square)
• Без
рефлексии…
совсем
• Смерть
листингу
инъекций
• http://goo.gl/7eTCJu
и
http://goo.gl/mW474Z
• Когда?
Скоро
:)
• Mortar
&
Flow
(http://goo.gl/8tlHkz)
95. Будущее
• Dagger
2
(разрабатывается
Google
и
Square)
• Без
рефлексии…
совсем
• Смерть
листингу
инъекций
• http://goo.gl/7eTCJu
и
http://goo.gl/mW474Z
• Когда?
Скоро
:)
• Mortar
&
Flow
(http://goo.gl/8tlHkz)
• DI
для
UI
в
Android
(Dagger-‐based)
103. Android
в
Омске
• События
GDG
Omsk
(DevFest,
хакатоны
и
пр.)
• События
+Android
Developers
Omsk
104. Android
в
Омске
• События
GDG
Omsk
(DevFest,
хакатоны
и
пр.)
• События
+Android
Developers
Omsk
• Доклады
на
IT-‐субботниках,
конференциях
и
мини-‐
конференциях
:)