SlideShare a Scribd company logo
1 of 20
Download to read offline
Инъекция зависимости и Инверсия Контроля
Инъекция зависимости,[object Object],Владимир Игнатьев и Антон Катков,[object Object],специально для Икспи-пати, Самара,[object Object]
Злейшие враги ИксПи-джедая,[object Object],Нетестируемый код,[object Object],Сложная и хрупкая архитектура,[object Object],Код, непригодный для повторного использования,[object Object],Вязкость (спагетти и копипаст),[object Object]
Проблематика: прямой вызов конструктора,[object Object],Как не меняя код класса подменить PaypalCreditCardProcessorна фейк? ,[object Object]
Проблематика: использование Фабрики,[object Object],Уже можно создатьтест!,[object Object],Но зависимости сокрыты в коде ;-(,[object Object]
Суть паттерна Инъекция Зависимости,[object Object],[object Object]
Ответственность за зависимость снимается с класса(делегируется другому классу)
Вообще класс поддерживает свои зависимости только на уровне интерфейсов
Модули верхнего уровня не зависят от модулей нижнего уровня,[object Object]
Результат применения паттерна,[object Object],[object Object]
 Мы можем переместить класс в другое «окружение» и нам не надо будет менять в нём ни строчки
 Иными словами, класс стал повторно используемым, менее связанным с «окружением»,[object Object]
 Прежде чем реализовать класс с помощью TDD, нужно сначала написать фейки зависимостейТак-то!,[object Object]
К счастью, кэп не прав!,[object Object],[object Object]
Автогенерациямоков
 Фреймворк! Фреймворк! Фреймворк!Фреймворк это добро.,[object Object]
Почему фреймворк это добро?,[object Object],[object Object]
Задача Инъектора — заниматься конструированием классов и «подтягиванием» зависимостей
Инъектор заменяет глобальный контроллер
 Фреймворки DI предоставляют возможность выносить настройку Инъектора из кода,[object Object]

More Related Content

Similar to Инъекция зависимости и Инверсия Контроля

Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»MskDotNet Community
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений» Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений» Yulia Tsisyk
 
Rambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRAMBLER&Co
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных системDima Dzuba
 
JEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советыJEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советыdmalykhanov
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в MagentoPavel Usachev
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.EatDog
 
Эволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеЭволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеAlexander Byndyu
 
JavaScript Design Patterns overview by Ksenia Redunova
JavaScript Design Patterns overview by Ksenia RedunovaJavaScript Design Patterns overview by Ksenia Redunova
JavaScript Design Patterns overview by Ksenia RedunovaLohika_Odessa_TechTalks
 
0480196 746 b8_lyasin_d_n_sankov_s_g_osnovy_programmirovaniya_v_srede_c_bui
0480196 746 b8_lyasin_d_n_sankov_s_g_osnovy_programmirovaniya_v_srede_c_bui0480196 746 b8_lyasin_d_n_sankov_s_g_osnovy_programmirovaniya_v_srede_c_bui
0480196 746 b8_lyasin_d_n_sankov_s_g_osnovy_programmirovaniya_v_srede_c_buiAnastasia Snegina
 
Dependency injection
Dependency injectionDependency injection
Dependency injectionGetDev.NET
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftAnton Loginov
 
Практическое применение принципа инверсии зависимостей на примере Ruby
Практическое применение принципа инверсии зависимостей на примере RubyПрактическое применение принципа инверсии зависимостей на примере Ruby
Практическое применение принципа инверсии зависимостей на примере RubyProvectus
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
 
шаблоны проектирования
шаблоны проектированияшаблоны проектирования
шаблоны проектированияksmster
 
Dependency injection на примере unity и n inject
Dependency injection на примере unity и n injectDependency injection на примере unity и n inject
Dependency injection на примере unity и n injectRoman Kalita
 
Dependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInjectDependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInjectakrakovetsky
 

Similar to Инъекция зависимости и Инверсия Контроля (20)

Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений» Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»
 
DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!
 
Rambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOS
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
 
JEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советыJEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советы
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
 
Эволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеЭволюция управления зависимостями в коде
Эволюция управления зависимостями в коде
 
Dagger 2
Dagger 2Dagger 2
Dagger 2
 
JavaScript Design Patterns overview by Ksenia Redunova
JavaScript Design Patterns overview by Ksenia RedunovaJavaScript Design Patterns overview by Ksenia Redunova
JavaScript Design Patterns overview by Ksenia Redunova
 
0480196 746 b8_lyasin_d_n_sankov_s_g_osnovy_programmirovaniya_v_srede_c_bui
0480196 746 b8_lyasin_d_n_sankov_s_g_osnovy_programmirovaniya_v_srede_c_bui0480196 746 b8_lyasin_d_n_sankov_s_g_osnovy_programmirovaniya_v_srede_c_bui
0480196 746 b8_lyasin_d_n_sankov_s_g_osnovy_programmirovaniya_v_srede_c_bui
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
 
Практическое применение принципа инверсии зависимостей на примере Ruby
Практическое применение принципа инверсии зависимостей на примере RubyПрактическое применение принципа инверсии зависимостей на примере Ruby
Практическое применение принципа инверсии зависимостей на примере Ruby
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
шаблоны проектирования
шаблоны проектированияшаблоны проектирования
шаблоны проектирования
 
Dependency injection на примере unity и n inject
Dependency injection на примере unity и n injectDependency injection на примере unity и n inject
Dependency injection на примере unity и n inject
 
Dependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInjectDependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInject
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 

Инъекция зависимости и Инверсия Контроля