SlideShare a Scribd company logo
Dependency	
  Injection	
  в	
  Android	
  
Кирилл	
  Бояршинов	
  
Android	
  Developer,	
  Live	
  Typing
Almaty	
  Google	
  Technology	
  User	
  Group
Almaty	
  Google	
  

Technology	
  User	
  Group
О	
  себе
О	
  себе
• Закончил	
  ОмГТУ	
  (АСОИУ)
О	
  себе
• Закончил	
  ОмГТУ	
  (АСОИУ)
• Делаю	
  крутые	
  приложения	
  в	
  Live	
  Typing:	
  
• КоммерсантЪ	
  
• Breath	
  Alcohol	
  Monitor	
  (by	
  Lapka)	
  
• PrizeWord	
  сканворды	
  
• Опросы	
  Департамента	
  транспорта	
  Москвы
О	
  себе
• Закончил	
  ОмГТУ	
  (АСОИУ)
• Делаю	
  крутые	
  приложения	
  в	
  Live	
  Typing:	
  
• КоммерсантЪ	
  
• Breath	
  Alcohol	
  Monitor	
  (by	
  Lapka)	
  
• PrizeWord	
  сканворды	
  
• Опросы	
  Департамента	
  транспорта	
  Москвы
• Участник	
  GDG	
  Omsk
О	
  себе
• Закончил	
  ОмГТУ	
  (АСОИУ)
• Делаю	
  крутые	
  приложения	
  в	
  Live	
  Typing:	
  
• КоммерсантЪ	
  
• Breath	
  Alcohol	
  Monitor	
  (by	
  Lapka)	
  
• PrizeWord	
  сканворды	
  
• Опросы	
  Департамента	
  транспорта	
  Москвы
• Участник	
  GDG	
  Omsk
• Огранизатор	
  Android	
  Developers	
  Omsk
О	
  себе
• Закончил	
  ОмГТУ	
  (АСОИУ)
• Делаю	
  крутые	
  приложения	
  в	
  Live	
  Typing:	
  
• КоммерсантЪ	
  
• Breath	
  Alcohol	
  Monitor	
  (by	
  Lapka)	
  
• PrizeWord	
  сканворды	
  
• Опросы	
  Департамента	
  транспорта	
  Москвы
• Участник	
  GDG	
  Omsk
• Огранизатор	
  Android	
  Developers	
  Omsk
• Увлечения:	
  космос,	
  спорт,	
  open	
  source
http://ltst.ru	
  
Внедрение	
  зависимостей	
  	
  
(Dependency	
  Injection)
Внедрение	
  зависимостей	
  	
  
(Dependency	
  Injection)
• Набор	
  паттернов	
  и	
  принципов	
  разработки	
  ПО
Внедрение	
  зависимостей	
  	
  
(Dependency	
  Injection)
• Набор	
  паттернов	
  и	
  принципов	
  разработки	
  ПО
• Позволяют	
  писать	
  слабосвязный	
  код
Внедрение	
  зависимостей	
  	
  
(Dependency	
  Injection)
• Набор	
  паттернов	
  и	
  принципов	
  разработки	
  ПО
• Позволяют	
  писать	
  слабосвязный	
  код
• Является	
  разновидностью	
  более	
  глобального	
  принципа	
  
инверсии	
  управления	
  (Inversion	
  of	
  Control)	
  (by	
  M.Fowler)
Внедрение	
  зависимостей	
  	
  
(Dependency	
  Injection)
• Набор	
  паттернов	
  и	
  принципов	
  разработки	
  ПО
• Позволяют	
  писать	
  слабосвязный	
  код
• Является	
  разновидностью	
  более	
  глобального	
  принципа	
  
инверсии	
  управления	
  (Inversion	
  of	
  Control)	
  (by	
  M.Fowler)
• Разделяет	
  порождение	
  компонентов,	
  от	
  тех,	
  кто	
  их	
  
запрашивает
Component Service
Assembler
Component
Service	
  
<<interface>>
ServiceImpl
<<request>>
<<create>>
<<inject>>
Принцип DI
public class Component {	

	

 private final Service service;
	

 public Component(Service service) {	

	

 	

 this.service = service;
}	

	

 public void doStuff() {
return service.doStuff();	

	

 }
}
JSR-­‐330
• @Inject	
  
• @Named	
  
• @Qualifier	
  
• @Scoped	
  
• @Singleton
Java	
  Frameworks
• Spring	
  
• Guice	
  
• PicoContainer	
  
• Avalon	
  
• …
Android
Цели	
  “ObjectGraph”
Цели	
  “ObjectGraph”
• Статический	
  анализ	
  всех	
  зависимостей	
  и	
  
инъекций
Цели	
  “ObjectGraph”
• Статический	
  анализ	
  всех	
  зависимостей	
  и	
  
инъекций
• Compile-­‐time	
  валидация	
  и	
  поиск	
  ошибок
Цели	
  “ObjectGraph”
• Статический	
  анализ	
  всех	
  зависимостей	
  и	
  
инъекций
• Compile-­‐time	
  валидация	
  и	
  поиск	
  ошибок
• Избавиться	
  от	
  рефлексии
Цели	
  “ObjectGraph”
• Статический	
  анализ	
  всех	
  зависимостей	
  и	
  
инъекций
• Compile-­‐time	
  валидация	
  и	
  поиск	
  ошибок
• Избавиться	
  от	
  рефлексии
• Незначительные	
  затраты	
  памяти
Разработка	
  “ObjectGraph”
Разработка	
  “ObjectGraph”
• 5	
  недель	
  работы	
  Jesse	
  Wilson
Разработка	
  “ObjectGraph”
• 5	
  недель	
  работы	
  Jesse	
  Wilson
• Bob	
  Lee	
  в	
  качестве	
  технического	
  советника
Разработка	
  “ObjectGraph”
• 5	
  недель	
  работы	
  Jesse	
  Wilson
• Bob	
  Lee	
  в	
  качестве	
  технического	
  советника
• “Огромный”	
  boolean	
  switch	
  в	
  приложениях	
  Square
Разработка	
  “ObjectGraph”
• 5	
  недель	
  работы	
  Jesse	
  Wilson
• Bob	
  Lee	
  в	
  качестве	
  технического	
  советника
• “Огромный”	
  boolean	
  switch	
  в	
  приложениях	
  Square
• Через	
  2	
  недели	
  Guice	
  был	
  полностью	
  удален
Разработка	
  “ObjectGraph”
• 5	
  недель	
  работы	
  Jesse	
  Wilson
• Bob	
  Lee	
  в	
  качестве	
  технического	
  советника
• “Огромный”	
  boolean	
  switch	
  в	
  приложениях	
  Square
• Через	
  2	
  недели	
  Guice	
  был	
  полностью	
  удален
• Переименован	
  в	
  Dagger
Разработка	
  “ObjectGraph”
• 5	
  недель	
  работы	
  Jesse	
  Wilson
• Bob	
  Lee	
  в	
  качестве	
  технического	
  советника
• “Огромный”	
  boolean	
  switch	
  в	
  приложениях	
  Square
• Через	
  2	
  недели	
  Guice	
  был	
  полностью	
  удален
• Переименован	
  в	
  Dagger
• Выложен	
  в	
  открытый	
  доступ	
  -­‐	
  http://github.com/
square/dagger
Dagger
Dagger
• ObjectGraph	
  -­‐	
  центральный	
  менеджер	
  
зависимостей	
  и	
  инжектор
Dagger
• ObjectGraph	
  -­‐	
  центральный	
  менеджер	
  
зависимостей	
  и	
  инжектор
• @Module	
  +	
  @Provides	
  -­‐	
  механизм	
  предоставления	
  
зависимостей
Dagger
• ObjectGraph	
  -­‐	
  центральный	
  менеджер	
  
зависимостей	
  и	
  инжектор
• @Module	
  +	
  @Provides	
  -­‐	
  механизм	
  предоставления	
  
зависимостей
• @Inject	
  -­‐	
  механизм	
  для	
  запроса	
  зависимостей
Dagger
• ObjectGraph	
  -­‐	
  центральный	
  менеджер	
  
зависимостей	
  и	
  инжектор
• @Module	
  +	
  @Provides	
  -­‐	
  механизм	
  предоставления	
  
зависимостей
• @Inject	
  -­‐	
  механизм	
  для	
  запроса	
  зависимостей
• И	
  еще	
  немного	
  сахара	
  и	
  магии	
  :)
Предоставление	
  зависимостей
Предоставление	
  зависимостей
• Модули	
  -­‐	
  классы,	
  предоставляющие	
  зависимости
Предоставление	
  зависимостей
• Модули	
  -­‐	
  классы,	
  предоставляющие	
  зависимости
• Для	
  этого	
  у	
  класса-­‐модуля	
  используется	
  аннотация	
  
@Module
Предоставление	
  зависимостей
• Модули	
  -­‐	
  классы,	
  предоставляющие	
  зависимости
• Для	
  этого	
  у	
  класса-­‐модуля	
  используется	
  аннотация	
  
@Module
• Аннотация	
  @Provides	
  у	
  метода	
  указывает,	
  что	
  
возвращаемый	
  тип	
  -­‐	
  зависимость
Предоставление	
  зависимостей
• Модули	
  -­‐	
  классы,	
  предоставляющие	
  зависимости
• Для	
  этого	
  у	
  класса-­‐модуля	
  используется	
  аннотация	
  
@Module
• Аннотация	
  @Provides	
  у	
  метода	
  указывает,	
  что	
  
возвращаемый	
  тип	
  -­‐	
  зависимость
• @Module	
  и	
  @Provides	
  предназначены	
  
использоваться	
  вместе
@Module
public class ServiceModule {
@Provides	

	

 public Service provideService() {
return new ServiceImpl(); 	

	

 }
}
Инъекция	
  зависимостей
Инъекция	
  зависимостей
• Инъекция	
  в	
  конструктор:
Инъекция	
  зависимостей
• Инъекция	
  в	
  конструктор:
• @Inject	
  у	
  конструктора
Инъекция	
  зависимостей
• Инъекция	
  в	
  конструктор:
• @Inject	
  у	
  конструктора
• Все	
  аргументы	
  конструктора	
  -­‐	
  зависимости
Инъекция	
  зависимостей
• Инъекция	
  в	
  конструктор:
• @Inject	
  у	
  конструктора
• Все	
  аргументы	
  конструктора	
  -­‐	
  зависимости
• Зависимости	
  могут	
  быть	
  сохранены	
  в	
  private	
  и	
  
final	
  полях
Инъекция	
  зависимостей
• Инъекция	
  в	
  конструктор:
• @Inject	
  у	
  конструктора
• Все	
  аргументы	
  конструктора	
  -­‐	
  зависимости
• Зависимости	
  могут	
  быть	
  сохранены	
  в	
  private	
  и	
  
final	
  полях
• Dagger	
  должен	
  создавать	
  объект
Инъекция	
  зависимостей
• Инъекция	
  в	
  конструктор:
• @Inject	
  у	
  конструктора
• Все	
  аргументы	
  конструктора	
  -­‐	
  зависимости
• Зависимости	
  могут	
  быть	
  сохранены	
  в	
  private	
  и	
  
final	
  полях
• Dagger	
  должен	
  создавать	
  объект
• Для	
  такого	
  объекта	
  не	
  требуется	
  @Provides	
  (т.е.	
  
его	
  можно	
  использовать	
  как	
  зависимость)
public class Component {	

	

 private final Service service;
@Inject
	

 public Component(Service service) {	

	

 	

 this.service = service;
}	

	

 public void doStuff() {
return service.doStuff(); 	

	

 }
}
Инъекция	
  зависимостей
Инъекция	
  зависимостей
• Инъекция	
  в	
  поле:
Инъекция	
  зависимостей
• Инъекция	
  в	
  поле:
• @Inject	
  у	
  полей-­‐зависимостей
Инъекция	
  зависимостей
• Инъекция	
  в	
  поле:
• @Inject	
  у	
  полей-­‐зависимостей
• Поля	
  не	
  могут	
  быть	
  private	
  или	
  final
Инъекция	
  зависимостей
• Инъекция	
  в	
  поле:
• @Inject	
  у	
  полей-­‐зависимостей
• Поля	
  не	
  могут	
  быть	
  private	
  или	
  final
• Инъекция	
  происходит	
  после	
  создания	
  объекта
Инъекция	
  зависимостей
• Инъекция	
  в	
  поле:
• @Inject	
  у	
  полей-­‐зависимостей
• Поля	
  не	
  могут	
  быть	
  private	
  или	
  final
• Инъекция	
  происходит	
  после	
  создания	
  объекта
• Чаще	
  всего	
  объект	
  ответственен	
  за	
  инъекцию	
  
самого	
  себя
public class Component {	

	

 @Inject Service service;
	

 public Component() {	

	

 	

 Injector.inject(this);
}	

	

 public void doStuff() {
return service.doStuff(); 	

	

 }
}
ObjectGraph
ObjectGraph
• Центральный	
  контроллер	
  модулей	
  (зависимотей)
ObjectGraph
• Центральный	
  контроллер	
  модулей	
  (зависимотей)
• Инжектор
ObjectGraph
• Центральный	
  контроллер	
  модулей	
  (зависимотей)
• Инжектор
• Может	
  быть	
  расширен	
  путем	
  добавления	
  других	
  
модулей.	
  
ObjectGraph
• Центральный	
  контроллер	
  модулей	
  (зависимотей)
• Инжектор
• Может	
  быть	
  расширен	
  путем	
  добавления	
  других	
  
модулей.	
  
• Модули	
  могут	
  переопределять	
  зависимости	
  из	
  
других	
  модулей	
  (только	
  1	
  раз)
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);
Листинг	
  объектов	
  для	
  инъекций
Листинг	
  объектов	
  для	
  инъекций
• Все	
  объекты	
  для	
  инъекции	
  должны	
  быть	
  
перечислены	
  в	
  модуле
Листинг	
  объектов	
  для	
  инъекций
• Все	
  объекты	
  для	
  инъекции	
  должны	
  быть	
  
перечислены	
  в	
  модуле
• Используется	
  для	
  статического	
  анализа	
  
зависимостей
@Module
public class ServiceModule {
@Provides	

	

 public Service provideService() {
return new ServiceImpl(); 	

	

 }
}
@Module(
injects = {
Component.class
}
)
public class ServiceModule {
@Provides	

	

 public Service provideService() {
return new ServiceImpl(); 	

	

 }
}
Как	
  пользоваться	
  в	
  Android
Как	
  пользоваться	
  в	
  Android
• Корневой	
  ObjectGraph	
  создается	
  в	
  подклассе	
  
Application
Как	
  пользоваться	
  в	
  Android
• Корневой	
  ObjectGraph	
  создается	
  в	
  подклассе	
  
Application
• Не	
  получится	
  использовать	
  инъекцию	
  в	
  
конструктор	
  (объекты	
  создаются	
  ОС)
Как	
  пользоваться	
  в	
  Android
• Корневой	
  ObjectGraph	
  создается	
  в	
  подклассе	
  
Application
• Не	
  получится	
  использовать	
  инъекцию	
  в	
  
конструктор	
  (объекты	
  создаются	
  ОС)
• Используется	
  инъекция	
  в	
  поле	
  (в	
  Activity,	
  Fragment,	
  
Service,	
  View)
Как	
  пользоваться	
  в	
  Android
• Корневой	
  ObjectGraph	
  создается	
  в	
  подклассе	
  
Application
• Не	
  получится	
  использовать	
  инъекцию	
  в	
  
конструктор	
  (объекты	
  создаются	
  ОС)
• Используется	
  инъекция	
  в	
  поле	
  (в	
  Activity,	
  Fragment,	
  
Service,	
  View)
• Можно	
  делить	
  приложение	
  на	
  “области	
  
видимости”	
  с	
  определенным	
  набором	
  модулей,	
  
используя	
  метод	
  .plus()
Демо
Преимущества
Преимущества
• Mock-­‐режим	
  для	
  параллельной	
  и	
  быстрой	
  
разработки	
  (module	
  override	
  +	
  gradle	
  flavours)
Преимущества
• Mock-­‐режим	
  для	
  параллельной	
  и	
  быстрой	
  
разработки	
  (module	
  override	
  +	
  gradle	
  flavours)
• Тестовый	
  режим	
  для	
  отладки	
  и	
  функционального	
  
тестирования	
  (module	
  override)
Производительность
Производительность
• Генерация	
  кода	
  для	
  зависимостей	
  за	
  счет	
  
Annotation	
  processing
Производительность
• Генерация	
  кода	
  для	
  зависимостей	
  за	
  счет	
  
Annotation	
  processing
• Происходит	
  автоматически	
  при	
  компиляции
Производительность
• Генерация	
  кода	
  для	
  зависимостей	
  за	
  счет	
  
Annotation	
  processing
• Происходит	
  автоматически	
  при	
  компиляции
• Не	
  используется	
  рефлексия	
  (почти)
Производительность
• Генерация	
  кода	
  для	
  зависимостей	
  за	
  счет	
  
Annotation	
  processing
• Происходит	
  автоматически	
  при	
  компиляции
• Не	
  используется	
  рефлексия	
  (почти)
• Удобно	
  для	
  отладки	
  и	
  для	
  разработчиков
Будущее
Будущее
• Dagger	
  2	
  (разрабатывается	
  Google	
  и	
  Square)
Будущее
• Dagger	
  2	
  (разрабатывается	
  Google	
  и	
  Square)
• Без	
  рефлексии…	
  совсем
Будущее
• Dagger	
  2	
  (разрабатывается	
  Google	
  и	
  Square)
• Без	
  рефлексии…	
  совсем
• Смерть	
  листингу	
  инъекций
Будущее
• Dagger	
  2	
  (разрабатывается	
  Google	
  и	
  Square)
• Без	
  рефлексии…	
  совсем
• Смерть	
  листингу	
  инъекций
• http://goo.gl/7eTCJu	
  и	
  http://goo.gl/mW474Z
Будущее
• Dagger	
  2	
  (разрабатывается	
  Google	
  и	
  Square)
• Без	
  рефлексии…	
  совсем
• Смерть	
  листингу	
  инъекций
• http://goo.gl/7eTCJu	
  и	
  http://goo.gl/mW474Z
• Когда?	
  Скоро	
  :)
Будущее
• Dagger	
  2	
  (разрабатывается	
  Google	
  и	
  Square)
• Без	
  рефлексии…	
  совсем
• Смерть	
  листингу	
  инъекций
• http://goo.gl/7eTCJu	
  и	
  http://goo.gl/mW474Z
• Когда?	
  Скоро	
  :)
• Mortar	
  &	
  Flow	
  (http://goo.gl/8tlHkz)
Будущее
• Dagger	
  2	
  (разрабатывается	
  Google	
  и	
  Square)
• Без	
  рефлексии…	
  совсем
• Смерть	
  листингу	
  инъекций
• http://goo.gl/7eTCJu	
  и	
  http://goo.gl/mW474Z
• Когда?	
  Скоро	
  :)
• Mortar	
  &	
  Flow	
  (http://goo.gl/8tlHkz)
• DI	
  для	
  UI	
  в	
  Android	
  (Dagger-­‐based)
Демо
Демо
• u2020	
  
(https://github.com/JakeWharton/u2020)
Демо
• u2020	
  
(https://github.com/JakeWharton/u2020)
• u2020-­‐mortar	
  
(https://github.com/lemonlabs/u2020-­‐mortar)
Демо
• u2020	
  
(https://github.com/JakeWharton/u2020)
• u2020-­‐mortar	
  
(https://github.com/lemonlabs/u2020-­‐mortar)
• u2020-­‐mvp	
  
(https://github.com/LiveTyping/u2020-­‐mvp)	
  
Собственный	
  опыт
Android	
  в	
  Омске
Android	
  в	
  Омске
• События	
  GDG	
  Omsk	
  (DevFest,	
  хакатоны	
  и	
  пр.)
Android	
  в	
  Омске
• События	
  GDG	
  Omsk	
  (DevFest,	
  хакатоны	
  и	
  пр.)
• События	
  +Android	
  Developers	
  Omsk
Android	
  в	
  Омске
• События	
  GDG	
  Omsk	
  (DevFest,	
  хакатоны	
  и	
  пр.)
• События	
  +Android	
  Developers	
  Omsk
• Доклады	
  на	
  IT-­‐субботниках,	
  конференциях	
  и	
  мини-­‐
конференциях	
  :)
DevFest	
  Omsk	
  2014
DevFest	
  Omsk	
  2014
• 1-­‐2	
  ноября	
  2014
DevFest	
  Omsk	
  2014
• 1-­‐2	
  ноября	
  2014
• http://gdgomsk.github.io/devfest-­‐site/
Спасибо	
  за	
  внимание
Almaty	
  Google	
  Technology	
  User	
  Group
www.ala-­‐gtug.org
Вопросы?
Almaty	
  Google	
  Technology	
  User	
  Group
Кирилл	
  Бояршинов	
  
k.boyarshinov@ltst.ru	
  
naghtarr@gmail.com

More Related Content

Similar to GTUG Almaty. Dependency Injection в Android

Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and Angular
SQALab
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
Кирилл Толкачёв
 
Эволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеЭволюция управления зависимостями в коде
Эволюция управления зависимостями в коде
Alexander Byndyu
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
Andrei Kaleshka
 
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью GradleЛюбовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью GradleGeeksLab Odessa
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCAndrew Mayorov
 
непрерывная интеграция шаг к непрерывному деплою родионов игорь
непрерывная интеграция   шаг к непрерывному деплою родионов игорьнепрерывная интеграция   шаг к непрерывному деплою родионов игорь
непрерывная интеграция шаг к непрерывному деплою родионов игорьdrupalconf
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
Oleksii Okhrymenko
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Ontico
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public API
MoscowJS
 
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьНепрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьPVasili
 
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Ontico
 
Модульная структура
Модульная структураМодульная структура
Модульная структура
Denis Tsvettsih
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
Dev2Dev
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
CodeFest
 
Непрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуНепрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуИгорь Родионов
 
Программируемость ACI. Примеры применения.
Программируемость ACI. Примеры применения.Программируемость ACI. Примеры применения.
Программируемость ACI. Примеры применения.
Cisco Russia
 
IT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действииIT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действииGleb Rybalko
 

Similar to GTUG Almaty. Dependency Injection в Android (20)

Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and Angular
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
 
Эволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеЭволюция управления зависимостями в коде
Эволюция управления зависимостями в коде
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
Tdd php
Tdd phpTdd php
Tdd php
 
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью GradleЛюбовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
 
непрерывная интеграция шаг к непрерывному деплою родионов игорь
непрерывная интеграция   шаг к непрерывному деплою родионов игорьнепрерывная интеграция   шаг к непрерывному деплою родионов игорь
непрерывная интеграция шаг к непрерывному деплою родионов игорь
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public API
 
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьНепрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
 
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
 
Модульная структура
Модульная структураМодульная структура
Модульная структура
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Непрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуНепрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойменту
 
Программируемость ACI. Примеры применения.
Программируемость ACI. Примеры применения.Программируемость ACI. Примеры применения.
Программируемость ACI. Примеры применения.
 
IT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действииIT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действии
 

GTUG Almaty. Dependency Injection в Android