Инверсия управления: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м оформление
дополнение
Строка 27: Строка 27:
** Через интерфейс внедрения ({{lang-en|Interface injection}})
** Через интерфейс внедрения ({{lang-en|Interface injection}})
* IoC контейнер ({{lang-en|IoC-container}})
* IoC контейнер ({{lang-en|IoC-container}})

== Критика ==
Все подходы, основанные на инверсии управления, страдают от следующих двух недостатков<ref>{{книга
| автор = Agha, G. and Igarashi, A. and Kobayashi, N. and Masuhara, H. and Matsuoka, S. and Shibayama, E. and Taura, K.
| заглавие = Concurrent Objects and Beyond: Papers dedicated to Akinori Yonezawa on the Occasion of His 65th Birthday
| издательство = Springer Berlin Heidelberg
| год = 2014
| allpages =
| pages = 433
| isbn = 9783662444719
| ref = Concurrent Objects and Beyond
}}</ref>:
* логика взаимодействия программы разбросана по отдельным обработчикам событий или классам;
* поток управления задан неявно в виде общего состояния (shared state) обработчиков событий.


== Примечания ==
== Примечания ==

Версия от 04:55, 16 марта 2015

Инверсия управления (англ. Inversion of Control, IoC) — важный принцип объектно-ориентированного программирования, используемый для уменьшения зацепления в компьютерных программах.

Формулировка:

  • Модули верхнего уровня не должны зависеть от модулей нижнего уровня. И те, и другие должны зависеть от абстракции.
  • Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Одной из реализаций IoC является внедрение зависимостей (англ. dependency injection)[1]. Внедрение зависимости используется во многих фреймворках, которые называются IoC-контейнерами.

Если сравнить с более низкоуровневыми технологиями, IoC-контейнер — это компоновщик, который собирает не объектные файлы, а объекты ООП (экземпляры класса) во время исполнения программы. Очевидно, для реализации подобной идеи было необходимо создать не только сам компоновщик, но и фабрику, производящую объекты. Аналогом такого компоновщика (естественно, более функциональным) является компилятор, одной из функций которого является создание объектных файлов. В идее компоновки программы во время исполнения нет ничего нового. Предоставление программисту инструментов внедрения зависимостей дало значительно бо́льшую гибкость в разработке и удобство в тестировании кода.[источник не указан 3851 день]

Методы реализации

Критика

Все подходы, основанные на инверсии управления, страдают от следующих двух недостатков[2]:

  • логика взаимодействия программы разбросана по отдельным обработчикам событий или классам;
  • поток управления задан неявно в виде общего состояния (shared state) обработчиков событий.

Примечания

  1. Yang, H. Software Reuse in the Emerging Cloud Computing Era. — Information Science Reference, 2012. — P. 54. — ISBN 9781466608986.
  2. Agha, G. and Igarashi, A. and Kobayashi, N. and Masuhara, H. and Matsuoka, S. and Shibayama, E. and Taura, K. Concurrent Objects and Beyond: Papers dedicated to Akinori Yonezawa on the Occasion of His 65th Birthday. — Springer Berlin Heidelberg, 2014. — P. 433. — ISBN 9783662444719.

Ссылки

  • Martin Fowler. InversionOfControl (англ.). Дата обращения: 5 ноября 2013.
  • Вольный перевод статьи Мартина Фаулера "Inversion of Control Containers and the Dependency Injection pattern". InversionOfControl. Дата обращения: 10 декабря 2014.