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

Weitere ähnliche Inhalte

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

Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»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
 

Ähnlich wie Инъекция зависимости и Инверсия Контроля (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
 

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