inversion of control в .net

Post on 05-Aug-2015

336 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Inversion of Control в .NET

Дмитрий Кожевников

Неизвестный банк

d.o.kozhevnikov@gmail.com

9-я конференция .NET разработчиков

12 октября 2014

dotnetconf.ru

2

Докладывает

• Кожевников Дмитрий

• .NET разработчик

• > 3 года enterprise разработки

• Информатизация ЖКХ

• Интеграция банковских систем

• Организация it-движухи

• Email d.o.kozhevnikov@gmail.com

3

Enterprise разработка

Поколения разработчиков

Много legacy code

Много технических долгов

Тяжёлая поддержка

4

Enterprise разработка

5

Сложным приложениям – гибкий дизайн

6

Разделение ответственности

7

Проблемы гибкого дизайна

Сложная композиция объектов

Связность и хрупкость связей

8

Инверсия управления Inversion of Control

• Детали зависят от абстракций

• Использование абстрактной инфраструктуры

• Инвертирование зависимостей

9

ЗависимостьDependency

• Предоставление инфраструктуры

• Отделение интерфейса от реализации

10

Внедрение зависимостейDependency Injection

• Поставка зависимостей

• Создание и конфигурация инфраструктуры

11

Как решаются проблемы

• Слабая связность

• Понятная сборка композиции

• Абстрактный код компилируется

• Ярко выраженные запахи кода

12

Внедрение через конструкторConstructor Injection

13

Уровень абстракции

14

Макароны в конструкторах

15

Раминь!

16

Проблемы внедрения через

конструктор

• Вызовы конструкторов становятся слишком большими

• Неясно, когда остановиться и кому отдать ответственность за DI

Кто поможет?

17

IoC-контейнеры

18

Настройка контейнера

19

Resolve<T>()

20

ServiceLocator

21

Проблемы и ServiceLocator• Вызовы конструкторов становятся слишком большими

• Неясно, когда остановиться и кому отдать ответственность за DI

22

ServiceLocator + Singleton

23

ServiceLocator это вундервафля

24

Ересь ServiceLocator

• Императивный

• Всемогущий

• Повышает связность

• Машина костылей

25

Пример #1

26

Пример #2

27

Инверсия управления именем

Императора

• IoC как framework

• CompositionRoot

• Register-Resolve-Release

28

Composition Root

29

Register-Resolve-Release

30

Инверсия управления как

framework• Один контейнер

• Единая композиция приложения

• Контейнер – глобальный сборщик

• Инверсия управления на полную

31

Внедрение через конструкторConstructor Injection

32

Почему IoC framework?

• Весь набор плюшек IoC

• Декларативная инфраструктура

• Интеграционное тестирование по уровням

• Отсутствие битых стёкол

• Размышления над дизайном

33

Итог: сложность не нужна!

34

Причём здесь кулинария?

35

Ссылки• Кулинария http://www.ozon.ru/context/detail/id/22104901/

• Модули

• http://code.google.com/p/autofac/wiki/StructuringWithModules

• CompositionRoot

• http://blog.ploeh.dk/2011/07/28/CompositionRoot/

• Register-Resolve-Release

• http://blog.ploeh.dk/2010/09/29/TheRegisterResolveReleasepattern/

36

Спасибо за внимание

Дмитрий Кожевников

Неизвестный банк

d.o.kozhevnikov@gmail.com

37

Вообще без new?

string, int, double

Domain Entities

DTO

POCO

37

38

Resolve вне CompositionRoot? Factory!

38

39

Несколько реализаций? #1

39

40

Несколько реализаций? #2

40

41

Несколько реализаций? #3

41

42

Core

Infrastructure

UI & API

External

IoС

Co

nta

iner

42

43

Правда всё!

Дмитрий Кожевников

Неизвестный банк

d.o.kozhevnikov@gmail.com

top related