WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте

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

В обычной программе программист сам решает в какой последовательности делать вызовы процедур. Но, если используется фреймворк, программист может разместить свой код в определенных точках выполнения (используя callback или другие механизмы), затем запустить «главную функцию» фреймворка, которая обеспечит все выполнение и вызовет код программиста тогда, когда это будет необходимо. Как следствие, происходит утеря контроля над выполнением кода — это и называется инверсией управления (фреймворк управляет кодом программиста, а не программист управляет фреймворком).

Инверсия управления бывает не только в фреймворках, но и в некоторых библиотеках (но обычно библиотеки не создают инверсии управления — они предоставляют набор функций, которые должен вызывать программист).

Описание

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

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

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

Критика

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

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

Примечания

  1. Inversion of Control with the Managed Extensibility Framework (MEF)
  2. 1 2 Yang, 2012.
  3. Robert C. Martin. Clean Code: A Handbook of Agile Software Craftsmanship. — Pearson Education, 2008. — P. 157. ISBN 978-0-13-608325-2.
  4. Martin Fowler. Inversion of Control Containers and the Dependency Injection pattern
  5. 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.

Литература

  • Yang, H. Software Reuse in the Emerging Cloud Computing Era. — Information Science Reference, 2012. — P. 54. ISBN 9781466608986.

Ссылки

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

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии