Инверсия управления и инверсия зависимостей

preview

Особое место в архитектуре занимает понятие "инверсия управления", это довольно широкий термин, который можно рассматривать в контексте разных аспектов управления архитектурой. Существуют много разных форм инверсии управления, и они могут находится на разных уровнях абстракции, отражать разные аспекты управления и деже иметь разное схематическое представление.

В этом стрим мы поговорим о трех вариантах инверсии контроля:

  • инверсия контроля зависимостей (DI или IOC 1,2,3 типов);
  • инверсия контроля потока управления;
  • инверсия контроля ресурсов

Что вообще означает инверсия

Duration: 5

Прежде чем говорить о конкретных вариантах инверсии управления хотелось бы отметить, что существует огромное количество разных толкований этого термина. В общем смысле под инверсией понимается передача управления от потомков к родителю, таким образом, что у родительских сущностей появляется контролировать потомков в рамках их ответственности.

Но самый главный вопрос, который мы должны себе задать - инверсия управления "чего"?

Простейшая инверсия

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

Duration: 7

Сердцем любых вычислений является процессор. Упрощенно это вычислительное устройство, которое получает на вход последовательность команд, а на выход отдает результат их выполнения. С позиции построения программы такой функциональности явно недостаточно, поэтому любой компьютер кроме процессора имеет память, в котрой хранится последовательность команд и с можно устанавливать указатель на ту команду, которую процессор должен выполнить следующей.

Так мы приходим к пониманию того, что программа - это команды которые должны быть организованы в правильно порядке и процесс организации произвольных команд в нужной последовательности и называется "поток управления".

Тот кто решает в какой последовательности выстраивать команды в потоке и осуществляет управление этим потоком.

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

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

Duration: 7

В простых программах поток команд может быть организован как угодно, хоть в виде обычного списка. Но усложнение программ и задач, которые эти программы решают привело к структурному программированию (основной принцип - код должен быть организован в блоки), а затем и к объектно ориентированному программированию.

Таким образом у нас появились абстракции более высокого уровня, которые объединяются в блоки, компоненты, модули и т.д. И особенностью этих блоков является то, что они могут зависеть друг от друга.

Так появилась потребность управления зависимостями и понятие "инверсии" зависимостей.

Важно! Данный подход является статическим.

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

Инверсия контроля зависимостей (DI)

Duration: 7

Следующий шаг в процессе организации зависимостей - это динамическое управление зависимостями. Т.е. такой подход, который бы позволил определять зависимости и подставлять их в программу непосредственно в процессе выполнения кода.

Так обычная инверсия зависимостей стала "инверсией контроля зависимостей", что получило отражение в принципах IOC 1, 2, 3 типов или DI.

Инверсия контроля зависимостей (DI)

Инверсия контроля ресурсов

Duration: 7

На данном этапе должно быть понятно, что инверсное управление чем-либо - это эффективный способ "развернуть" управление и разгрузить части системы, перенеся центры принятия решений в более удачное место. Этот принцип можно применять где угодно. Я приведу пример из личного опыта, как мы инвертировали стандартные процессы управления ресурсов, в средствах мониторинга. Это пример инверсии более высокого уровня, которая тем ни менее остается инверсией управления.

Инверсия контроля ресурсов

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

Duration: 20

Рассмотрим детально то, как формируется инверсия управления в разных случаях, на конкретных вариантах реализации.