SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
Управление зависимостями в
коде
Александр Бындю
ByndyuSoft
http://www.byndyu.ru
6-я конференция .NET разработчиков
28 апреля 2013
www.dotnetconf.ru
2Управление зависимостями в коде
Обо мне
1. Владелец компании ByndyuSoft
2. Консультант по вопросам разработки приложений и
организации работы IT компаний
3. Внештатный сотрудник Академии АйТи
4. Технический блог http://blog.byndyu.ru
5. Преподаю в ЮУрГУ
6. Организую конференции .NET-разработчиков
http://www.dotnetconf.ru
7. Веду группу в Google Group по проблемам
разработки приложений
http://groups.google.com/dotnetconf
3Управление зависимостями в коде
Исходный код примеров
https://github.com/AlexanderByndyu/dotnetco
nf/tree/master/IoC
4Управление зависимостями в коде
1. Coupling и Cohesion
2. Принцип инверсии зависимостей
3. Применение DIP
4. Service Locator
5. IoC-контейнер
6. Абстрактные фабрики через контейнер
План
5Управление зависимостями в коде
Coupling
(Dependency)
1. Связность – метрика,
характеризующая степень
зависимости классов друг от друга
2. Loosely coupled vs. Tightly coupled
3. Типы:
– Content coupling
– Common coupling
– Control coupling
– Data coupling
– Message coupling
Введение: Базовые понятия
6Управление зависимостями в коде
Cohesion
1. Сцепленность –метрика, характеризующая на
сколько элементы модуля принадлежат друг другу
2. Low cohesion vs. High cohesion
3. Coupling ~ Cohesion
4. Типы:
– Coincidental cohesion (worst)
– Logical cohesion
– Temporal cohesion
– Procedural cohesion
– Communicational cohesion
– Sequential cohesion
– Functional cohesion (best)
Введение: Базовые понятия
7Управление зависимостями в коде
Пример сильной связности
1 - OriginalProgram.sln
1. Компоненты без интерфейсов
2. Сильная связанность
3. Нарушение SRP
4. Нарушение OCP
5. Плохо тестируемые компоненты
8Управление зависимостями в коде
Design for testability
1. Сильная связность затрудняет модульное
тестирование.
2. Работа внешними ресурсами затрудняет
тестирование компонентов.
Примеры внешних ресурсов:
• Обращения к сторонним сервисам
• Файловая система
• Файлы конфигурации
• Active Directory
• Web-Services
• ….
http://msdn.microsoft.com/en-us/magazine/dd263069.aspx
9Управление зависимостями в коде
Принципыпроектированияклассов
Модули верхнего уровня не должны зависеть
от модулей нижнего уровня. Оба должны
зависеть от абстракции
Абстракции не должны зависеть от деталей.
Детали должны зависеть от абстракции
Реализация принципа:
Plugin, Factory, Service Locator,
Inversion of Control, Dependency Injection
Dependency Inversion Principle
10Управление зависимостями в коде
Пример применения DIP
2 - ApplyDIPProgram.sln
11Управление зависимостями в коде
Типы зависимостей
1. Stable Dependencies
1. Домен приложения
2. Классы, которые не будут изменены (Program,
Global.asax, …)
3. Сервисы, которые не будут меняться
(не обманывайте себя, они обязательно будут)
2. Volatile Dependencies
1. Сервисы в приложении
2. Внешние библиотеки
3. Работа с внешней инфраструктурой
4. DateTime?
12Управление зависимостями в коде
Service Locator
3 - ApplyIoCProgram.sln
Изначальный вариант
Выделяем конфигурирование зависимости
13Управление зависимостями в коде
Dependency Injection
• Constructor Injection
• «Всегда» инициализированный
• Хорошая видимость зависимости
• Скрывание сеттеров
• Setter Injection
• Компонент пассивный
• Кто-то выставляет зависимость
14Управление зависимостями в коде
Пример использования IoC
4 - Apply NinjectProgram.sln
15Управление зависимостями в коде
IoC-контейнеры в .NET
• Castle Windsor
http://www.castleproject.org/container/index.html
• Unity (Microsoft P&P)
http://unity.codeplex.com
• Ninject
http://ninject.org
16Управление зависимостями в коде
Плюсы от DI
1. Late binding
Сервисы могут быть заменены другими сервисами
2. Extensibility
Код может быть расширен и легко повторно использован
3. Parallel development
Разработка кода с низкой связностью упрощает работу в
параллели
4. Maintainability
Классы с четкими границами ответственности легко
сопровождать
5. Testability
Модули могут быть протестированы
17Управление зависимостями в коде
Абстрактная приабстрактная
фабрика
Пример реального использования:
https://github.com/AlexanderByndyu/ByndyuSoft.Infrastructure/tree/master/source/I
nfrastructure.Domain/Commands
5 - AbstractFactoryProgram.sln
18Управление зависимостями в коде
Service Lifestyle
1. Singleton
2. Transient
3. PerWebRequest
4. PerThread
5. …
19Управление зависимостями в коде
Обертка над IoC-контейнером
Используем Adapter, чтобы не
привязываться к конкретному
IoC-контейнеру
20Управление зависимостями в коде
Ссылки
• Видео Управление зависимостями в коде
• Статья Принцип инверсии зависимости
• Книга Dependency Injection in .NET
21Управление зависимостями в коде
Спасибо за внимание!
Буду рад ответить на ваши
вопросы лично или через:
blog.byndyu.ru
alexanderbyndyu
alexander.byndyu@gmail.com

Más contenido relacionado

La actualidad más candente

Сергей Смирнов, Виталий Александров. Оздоровление унаследованной информационн...
Сергей Смирнов, Виталий Александров. Оздоровление унаследованной информационн...Сергей Смирнов, Виталий Александров. Оздоровление унаследованной информационн...
Сергей Смирнов, Виталий Александров. Оздоровление унаследованной информационн...ScrumTrek
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.ScrumTrek
 
Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...
Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...
Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...ScrumTrek
 
Евгений Джамалов. Agile в условиях мульти-вендорности и распределённых команд.
Евгений Джамалов. Agile в условиях мульти-вендорности и распределённых команд.Евгений Джамалов. Agile в условиях мульти-вендорности и распределённых команд.
Евгений Джамалов. Agile в условиях мульти-вендорности и распределённых команд.ScrumTrek
 
грунский алексей. практика разработки по стандарту Wcag 2.0
грунский алексей. практика разработки по  стандарту Wcag 2.0грунский алексей. практика разработки по  стандарту Wcag 2.0
грунский алексей. практика разработки по стандарту Wcag 2.0elenae00
 
Автоматизация тестирования как сервис
Автоматизация тестирования как сервисАвтоматизация тестирования как сервис
Автоматизация тестирования как сервисautomated-testing.info
 
Tech talk Angular 2
Tech talk Angular 2Tech talk Angular 2
Tech talk Angular 2DA-14
 
МАПО Лекция 18 Прототип
МАПО Лекция 18 ПрототипМАПО Лекция 18 Прототип
МАПО Лекция 18 ПрототипОлег Гудаев
 
DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)Alexey Kachayev
 
Приступаем к разработке Android приложений
Приступаем к разработке Android приложенийПриступаем к разработке Android приложений
Приступаем к разработке Android приложенийmetaform
 
Clean architecture on Android
Clean architecture on AndroidClean architecture on Android
Clean architecture on AndroidGDG Odessa
 
Алексей Рыбак (Badoo)
Алексей Рыбак (Badoo)Алексей Рыбак (Badoo)
Алексей Рыбак (Badoo)Ontico
 
Intranet benchmarking (comparing Best Russian intranets to the world ones)
Intranet benchmarking (comparing Best Russian intranets to the world ones)Intranet benchmarking (comparing Best Russian intranets to the world ones)
Intranet benchmarking (comparing Best Russian intranets to the world ones)Elena Bogdanova
 
«Android Data Binding». Вадим Котов
«Android Data Binding». Вадим Котов«Android Data Binding». Вадим Котов
«Android Data Binding». Вадим КотовDataArt
 
эмпирическая разработка Agile days
эмпирическая разработка   Agile daysэмпирическая разработка   Agile days
эмпирическая разработка Agile daysAlexander Borodin
 
Работа с рисками в Scrum проектах
Работа с рисками в Scrum проектахРабота с рисками в Scrum проектах
Работа с рисками в Scrum проектахDenis Tuchin
 

La actualidad más candente (20)

Сергей Смирнов, Виталий Александров. Оздоровление унаследованной информационн...
Сергей Смирнов, Виталий Александров. Оздоровление унаследованной информационн...Сергей Смирнов, Виталий Александров. Оздоровление унаследованной информационн...
Сергей Смирнов, Виталий Александров. Оздоровление унаследованной информационн...
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.
 
Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...
Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...
Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...
 
Евгений Джамалов. Agile в условиях мульти-вендорности и распределённых команд.
Евгений Джамалов. Agile в условиях мульти-вендорности и распределённых команд.Евгений Джамалов. Agile в условиях мульти-вендорности и распределённых команд.
Евгений Джамалов. Agile в условиях мульти-вендорности и распределённых команд.
 
Tdd from the middle
Tdd from the middleTdd from the middle
Tdd from the middle
 
грунский алексей. практика разработки по стандарту Wcag 2.0
грунский алексей. практика разработки по  стандарту Wcag 2.0грунский алексей. практика разработки по  стандарту Wcag 2.0
грунский алексей. практика разработки по стандарту Wcag 2.0
 
Автоматизация тестирования как сервис
Автоматизация тестирования как сервисАвтоматизация тестирования как сервис
Автоматизация тестирования как сервис
 
МиСПИСиТ (литература по курсу)
МиСПИСиТ (литература по курсу)МиСПИСиТ (литература по курсу)
МиСПИСиТ (литература по курсу)
 
Tech talk Angular 2
Tech talk Angular 2Tech talk Angular 2
Tech talk Angular 2
 
МАПО Лекция 18 Прототип
МАПО Лекция 18 ПрототипМАПО Лекция 18 Прототип
МАПО Лекция 18 Прототип
 
DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)
 
Приступаем к разработке Android приложений
Приступаем к разработке Android приложенийПриступаем к разработке Android приложений
Приступаем к разработке Android приложений
 
Clean architecture on Android
Clean architecture on AndroidClean architecture on Android
Clean architecture on Android
 
Алексей Рыбак (Badoo)
Алексей Рыбак (Badoo)Алексей Рыбак (Badoo)
Алексей Рыбак (Badoo)
 
Лекция 1. Введение в Android.
Лекция 1. Введение в Android.Лекция 1. Введение в Android.
Лекция 1. Введение в Android.
 
Software Development
Software DevelopmentSoftware Development
Software Development
 
Intranet benchmarking (comparing Best Russian intranets to the world ones)
Intranet benchmarking (comparing Best Russian intranets to the world ones)Intranet benchmarking (comparing Best Russian intranets to the world ones)
Intranet benchmarking (comparing Best Russian intranets to the world ones)
 
«Android Data Binding». Вадим Котов
«Android Data Binding». Вадим Котов«Android Data Binding». Вадим Котов
«Android Data Binding». Вадим Котов
 
эмпирическая разработка Agile days
эмпирическая разработка   Agile daysэмпирическая разработка   Agile days
эмпирическая разработка Agile days
 
Работа с рисками в Scrum проектах
Работа с рисками в Scrum проектахРабота с рисками в Scrum проектах
Работа с рисками в Scrum проектах
 

Destacado

Agile days 2010 человеческий фактор и agile
Agile days 2010 человеческий фактор и agileAgile days 2010 человеческий фактор и agile
Agile days 2010 человеческий фактор и agileNikita Filippov
 
CQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафорCQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафорAlexander Byndyu
 
Customer satisfaction для программистов
Customer satisfaction для программистовCustomer satisfaction для программистов
Customer satisfaction для программистовAlexander Byndyu
 
Кнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продуктаКнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продуктаAlexander Byndyu
 
Большие возможности для маленькой компании
Большие возможности для маленькой компанииБольшие возможности для маленькой компании
Большие возможности для маленькой компанииAlexander Byndyu
 
Переход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределеннойПереход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределеннойAlexander Byndyu
 
Пять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектовПять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектовAlexander Byndyu
 
Как размножается Sphinx
Как размножается SphinxКак размножается Sphinx
Как размножается SphinxAlexander Byndyu
 
ElasticSearch: Найдется все... и быстро!
ElasticSearch: Найдется все... и быстро!ElasticSearch: Найдется все... и быстро!
ElasticSearch: Найдется все... и быстро!Alexander Byndyu
 
Много данных, много вычислений: есть ли жизнь на Amazon'е
Много данных, много вычислений: есть ли жизнь на Amazon'еМного данных, много вычислений: есть ли жизнь на Amazon'е
Много данных, много вычислений: есть ли жизнь на Amazon'еAlexander Byndyu
 
Бутылка саке и муравей
Бутылка саке и муравейБутылка саке и муравей
Бутылка саке и муравейAlexander Byndyu
 
Смотрим на Mvvm сквозь prism'у
Смотрим на Mvvm сквозь prism'уСмотрим на Mvvm сквозь prism'у
Смотрим на Mvvm сквозь prism'уAlexander Byndyu
 
Не SQL'ем единым
Не SQL'ем единымНе SQL'ем единым
Не SQL'ем единымAlexander Byndyu
 
Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.
Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.
Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.Alexander Byndyu
 
Клиентская оптимизация в ритме военного марша
Клиентская оптимизация в ритме военного маршаКлиентская оптимизация в ритме военного марша
Клиентская оптимизация в ритме военного маршаAlexander Byndyu
 
Data mining в реальном проекте
Data mining в реальном проектеData mining в реальном проекте
Data mining в реальном проектеAlexander Byndyu
 
код шрёдингера
код шрёдингеракод шрёдингера
код шрёдингераRuslan Safin
 
Непрерывная интеграция в ритме военного марша
Непрерывная интеграция в ритме военного маршаНепрерывная интеграция в ритме военного марша
Непрерывная интеграция в ритме военного маршаAlexander Byndyu
 

Destacado (20)

Agile days 2010 человеческий фактор и agile
Agile days 2010 человеческий фактор и agileAgile days 2010 человеческий фактор и agile
Agile days 2010 человеческий фактор и agile
 
CQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафорCQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафор
 
Customer satisfaction для программистов
Customer satisfaction для программистовCustomer satisfaction для программистов
Customer satisfaction для программистов
 
Кнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продуктаКнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продукта
 
Большие возможности для маленькой компании
Большие возможности для маленькой компанииБольшие возможности для маленькой компании
Большие возможности для маленькой компании
 
Час Кода 2015
Час Кода 2015Час Кода 2015
Час Кода 2015
 
Переход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределеннойПереход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределенной
 
Пять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектовПять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектов
 
Как размножается Sphinx
Как размножается SphinxКак размножается Sphinx
Как размножается Sphinx
 
ElasticSearch: Найдется все... и быстро!
ElasticSearch: Найдется все... и быстро!ElasticSearch: Найдется все... и быстро!
ElasticSearch: Найдется все... и быстро!
 
Dapper + QueryObject
Dapper + QueryObjectDapper + QueryObject
Dapper + QueryObject
 
Много данных, много вычислений: есть ли жизнь на Amazon'е
Много данных, много вычислений: есть ли жизнь на Amazon'еМного данных, много вычислений: есть ли жизнь на Amazon'е
Много данных, много вычислений: есть ли жизнь на Amazon'е
 
Бутылка саке и муравей
Бутылка саке и муравейБутылка саке и муравей
Бутылка саке и муравей
 
Смотрим на Mvvm сквозь prism'у
Смотрим на Mvvm сквозь prism'уСмотрим на Mvvm сквозь prism'у
Смотрим на Mvvm сквозь prism'у
 
Не SQL'ем единым
Не SQL'ем единымНе SQL'ем единым
Не SQL'ем единым
 
Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.
Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.
Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.
 
Клиентская оптимизация в ритме военного марша
Клиентская оптимизация в ритме военного маршаКлиентская оптимизация в ритме военного марша
Клиентская оптимизация в ритме военного марша
 
Data mining в реальном проекте
Data mining в реальном проектеData mining в реальном проекте
Data mining в реальном проекте
 
код шрёдингера
код шрёдингеракод шрёдингера
код шрёдингера
 
Непрерывная интеграция в ритме военного марша
Непрерывная интеграция в ритме военного маршаНепрерывная интеграция в ритме военного марша
Непрерывная интеграция в ритме военного марша
 

Similar a Эволюция управления зависимостями в коде

ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf Conference
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 
CodeFest 2014. Шкредов С. — Управление зависимостями в архитектуре. Переход о...
CodeFest 2014. Шкредов С. — Управление зависимостями в архитектуре. Переход о...CodeFest 2014. Шкредов С. — Управление зависимостями в архитектуре. Переход о...
CodeFest 2014. Шкредов С. — Управление зависимостями в архитектуре. Переход о...CodeFest
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"Dmitry Savchenko
 
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextВнедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextGoSharp
 
Тестирование мобильных приложений
Тестирование мобильных приложенийТестирование мобильных приложений
Тестирование мобильных приложенийAlexander Khozya
 
SECON'2017, Реуцкий Вадим, О чем мечтают современные андройды: особенности ра...
SECON'2017, Реуцкий Вадим, О чем мечтают современные андройды: особенности ра...SECON'2017, Реуцкий Вадим, О чем мечтают современные андройды: особенности ра...
SECON'2017, Реуцкий Вадим, О чем мечтают современные андройды: особенности ра...SECON
 
JEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советыJEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советыdmalykhanov
 
Импортозамещение КРОК
Импортозамещение КРОКИмпортозамещение КРОК
Импортозамещение КРОККРОК
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Yulia Tsisyk
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»MskDotNet Community
 
GTUG Almaty. Dependency Injection в Android
GTUG Almaty. Dependency Injection в Android GTUG Almaty. Dependency Injection в Android
GTUG Almaty. Dependency Injection в Android Madina Kamzina
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»MskDotNet Community
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений» Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений» Yulia Tsisyk
 
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...Andrey Prozorov, CISM, CIPP/E, CDPSE. LA 27001
 

Similar a Эволюция управления зависимостями в коде (20)

ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
 
It meetup cd
It meetup cdIt meetup cd
It meetup cd
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
CodeFest 2014. Шкредов С. — Управление зависимостями в архитектуре. Переход о...
CodeFest 2014. Шкредов С. — Управление зависимостями в архитектуре. Переход о...CodeFest 2014. Шкредов С. — Управление зависимостями в архитектуре. Переход о...
CodeFest 2014. Шкредов С. — Управление зависимостями в архитектуре. Переход о...
 
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
 
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextВнедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
 
Тестирование мобильных приложений
Тестирование мобильных приложенийТестирование мобильных приложений
Тестирование мобильных приложений
 
SECON'2017, Реуцкий Вадим, О чем мечтают современные андройды: особенности ра...
SECON'2017, Реуцкий Вадим, О чем мечтают современные андройды: особенности ра...SECON'2017, Реуцкий Вадим, О чем мечтают современные андройды: особенности ра...
SECON'2017, Реуцкий Вадим, О чем мечтают современные андройды: особенности ра...
 
JEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советыJEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советы
 
Импортозамещение КРОК
Импортозамещение КРОКИмпортозамещение КРОК
Импортозамещение КРОК
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
GTUG Almaty. Dependency Injection в Android
GTUG Almaty. Dependency Injection в Android GTUG Almaty. Dependency Injection в Android
GTUG Almaty. Dependency Injection в Android
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений» Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»
 
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
 

Más de Alexander Byndyu

Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...Alexander Byndyu
 
Применение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеПрименение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеAlexander Byndyu
 
Антихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить измененияАнтихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить измененияAlexander Byndyu
 
Карта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планированияКарта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планированияAlexander Byndyu
 
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработкиКак перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработкиAlexander Byndyu
 
История о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проектаИстория о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проектаAlexander Byndyu
 
Шпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателяШпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателяAlexander Byndyu
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияAlexander Byndyu
 
IT-директор на аутсорсе
IT-директор на аутсорсеIT-директор на аутсорсе
IT-директор на аутсорсеAlexander Byndyu
 
Бизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуруБизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуруAlexander Byndyu
 
Impact Mapping на практике v2
Impact Mapping на практике v2Impact Mapping на практике v2
Impact Mapping на практике v2Alexander Byndyu
 
Пять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктовПять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктовAlexander Byndyu
 
Impact mapping in practice
Impact mapping in practiceImpact mapping in practice
Impact mapping in practiceAlexander Byndyu
 
Impact Mapping на практике
Impact Mapping на практикеImpact Mapping на практике
Impact Mapping на практикеAlexander Byndyu
 
Баг-трекер по-новому: что и почему JetBrains изменил в последней версии YouTrack
Баг-трекер по-новому: что и почему JetBrains изменил в последней версии YouTrackБаг-трекер по-новому: что и почему JetBrains изменил в последней версии YouTrack
Баг-трекер по-новому: что и почему JetBrains изменил в последней версии YouTrackAlexander Byndyu
 
Использование сервера Continuous Integration для разработки мобильных приложений
Использование сервера Continuous Integration для разработки мобильных приложенийИспользование сервера Continuous Integration для разработки мобильных приложений
Использование сервера Continuous Integration для разработки мобильных приложенийAlexander Byndyu
 
Облачный бекенд для мобильной разработки
Облачный бекенд для мобильной разработкиОблачный бекенд для мобильной разработки
Облачный бекенд для мобильной разработкиAlexander Byndyu
 
Индексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизацииИндексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизацииAlexander Byndyu
 

Más de Alexander Byndyu (18)

Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
 
Применение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеПрименение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзе
 
Антихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить измененияАнтихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить изменения
 
Карта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планированияКарта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планирования
 
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработкиКак перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
 
История о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проектаИстория о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проекта
 
Шпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателяШпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателя
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс Россия
 
IT-директор на аутсорсе
IT-директор на аутсорсеIT-директор на аутсорсе
IT-директор на аутсорсе
 
Бизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуруБизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуру
 
Impact Mapping на практике v2
Impact Mapping на практике v2Impact Mapping на практике v2
Impact Mapping на практике v2
 
Пять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктовПять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктов
 
Impact mapping in practice
Impact mapping in practiceImpact mapping in practice
Impact mapping in practice
 
Impact Mapping на практике
Impact Mapping на практикеImpact Mapping на практике
Impact Mapping на практике
 
Баг-трекер по-новому: что и почему JetBrains изменил в последней версии YouTrack
Баг-трекер по-новому: что и почему JetBrains изменил в последней версии YouTrackБаг-трекер по-новому: что и почему JetBrains изменил в последней версии YouTrack
Баг-трекер по-новому: что и почему JetBrains изменил в последней версии YouTrack
 
Использование сервера Continuous Integration для разработки мобильных приложений
Использование сервера Continuous Integration для разработки мобильных приложенийИспользование сервера Continuous Integration для разработки мобильных приложений
Использование сервера Continuous Integration для разработки мобильных приложений
 
Облачный бекенд для мобильной разработки
Облачный бекенд для мобильной разработкиОблачный бекенд для мобильной разработки
Облачный бекенд для мобильной разработки
 
Индексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизацииИндексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизации
 

Эволюция управления зависимостями в коде

  • 1. Управление зависимостями в коде Александр Бындю ByndyuSoft http://www.byndyu.ru 6-я конференция .NET разработчиков 28 апреля 2013 www.dotnetconf.ru
  • 2. 2Управление зависимостями в коде Обо мне 1. Владелец компании ByndyuSoft 2. Консультант по вопросам разработки приложений и организации работы IT компаний 3. Внештатный сотрудник Академии АйТи 4. Технический блог http://blog.byndyu.ru 5. Преподаю в ЮУрГУ 6. Организую конференции .NET-разработчиков http://www.dotnetconf.ru 7. Веду группу в Google Group по проблемам разработки приложений http://groups.google.com/dotnetconf
  • 3. 3Управление зависимостями в коде Исходный код примеров https://github.com/AlexanderByndyu/dotnetco nf/tree/master/IoC
  • 4. 4Управление зависимостями в коде 1. Coupling и Cohesion 2. Принцип инверсии зависимостей 3. Применение DIP 4. Service Locator 5. IoC-контейнер 6. Абстрактные фабрики через контейнер План
  • 5. 5Управление зависимостями в коде Coupling (Dependency) 1. Связность – метрика, характеризующая степень зависимости классов друг от друга 2. Loosely coupled vs. Tightly coupled 3. Типы: – Content coupling – Common coupling – Control coupling – Data coupling – Message coupling Введение: Базовые понятия
  • 6. 6Управление зависимостями в коде Cohesion 1. Сцепленность –метрика, характеризующая на сколько элементы модуля принадлежат друг другу 2. Low cohesion vs. High cohesion 3. Coupling ~ Cohesion 4. Типы: – Coincidental cohesion (worst) – Logical cohesion – Temporal cohesion – Procedural cohesion – Communicational cohesion – Sequential cohesion – Functional cohesion (best) Введение: Базовые понятия
  • 7. 7Управление зависимостями в коде Пример сильной связности 1 - OriginalProgram.sln 1. Компоненты без интерфейсов 2. Сильная связанность 3. Нарушение SRP 4. Нарушение OCP 5. Плохо тестируемые компоненты
  • 8. 8Управление зависимостями в коде Design for testability 1. Сильная связность затрудняет модульное тестирование. 2. Работа внешними ресурсами затрудняет тестирование компонентов. Примеры внешних ресурсов: • Обращения к сторонним сервисам • Файловая система • Файлы конфигурации • Active Directory • Web-Services • …. http://msdn.microsoft.com/en-us/magazine/dd263069.aspx
  • 9. 9Управление зависимостями в коде Принципыпроектированияклассов Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракции Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракции Реализация принципа: Plugin, Factory, Service Locator, Inversion of Control, Dependency Injection Dependency Inversion Principle
  • 10. 10Управление зависимостями в коде Пример применения DIP 2 - ApplyDIPProgram.sln
  • 11. 11Управление зависимостями в коде Типы зависимостей 1. Stable Dependencies 1. Домен приложения 2. Классы, которые не будут изменены (Program, Global.asax, …) 3. Сервисы, которые не будут меняться (не обманывайте себя, они обязательно будут) 2. Volatile Dependencies 1. Сервисы в приложении 2. Внешние библиотеки 3. Работа с внешней инфраструктурой 4. DateTime?
  • 12. 12Управление зависимостями в коде Service Locator 3 - ApplyIoCProgram.sln Изначальный вариант Выделяем конфигурирование зависимости
  • 13. 13Управление зависимостями в коде Dependency Injection • Constructor Injection • «Всегда» инициализированный • Хорошая видимость зависимости • Скрывание сеттеров • Setter Injection • Компонент пассивный • Кто-то выставляет зависимость
  • 14. 14Управление зависимостями в коде Пример использования IoC 4 - Apply NinjectProgram.sln
  • 15. 15Управление зависимостями в коде IoC-контейнеры в .NET • Castle Windsor http://www.castleproject.org/container/index.html • Unity (Microsoft P&P) http://unity.codeplex.com • Ninject http://ninject.org
  • 16. 16Управление зависимостями в коде Плюсы от DI 1. Late binding Сервисы могут быть заменены другими сервисами 2. Extensibility Код может быть расширен и легко повторно использован 3. Parallel development Разработка кода с низкой связностью упрощает работу в параллели 4. Maintainability Классы с четкими границами ответственности легко сопровождать 5. Testability Модули могут быть протестированы
  • 17. 17Управление зависимостями в коде Абстрактная приабстрактная фабрика Пример реального использования: https://github.com/AlexanderByndyu/ByndyuSoft.Infrastructure/tree/master/source/I nfrastructure.Domain/Commands 5 - AbstractFactoryProgram.sln
  • 18. 18Управление зависимостями в коде Service Lifestyle 1. Singleton 2. Transient 3. PerWebRequest 4. PerThread 5. …
  • 19. 19Управление зависимостями в коде Обертка над IoC-контейнером Используем Adapter, чтобы не привязываться к конкретному IoC-контейнеру
  • 20. 20Управление зависимостями в коде Ссылки • Видео Управление зависимостями в коде • Статья Принцип инверсии зависимости • Книга Dependency Injection in .NET
  • 21. 21Управление зависимостями в коде Спасибо за внимание! Буду рад ответить на ваши вопросы лично или через: blog.byndyu.ru alexanderbyndyu alexander.byndyu@gmail.com