Инверсия управления: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
РоманСузи (обсуждение | вклад) м оформление |
РоманСузи (обсуждение | вклад) дополнение |
||
Строка 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 день]
Методы реализации
- Фабричный метод (англ. Factory Method pattern)
- Service locator
- Внедрение зависимости (англ. Dependency injection)
- IoC контейнер (англ. IoC-container)
Критика
Все подходы, основанные на инверсии управления, страдают от следующих двух недостатков[2]:
- логика взаимодействия программы разбросана по отдельным обработчикам событий или классам;
- поток управления задан неявно в виде общего состояния (shared state) обработчиков событий.
Примечания
- ↑ Yang, H. Software Reuse in the Emerging Cloud Computing Era. — Information Science Reference, 2012. — P. 54. — ISBN 9781466608986.
- ↑ 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.
int main()
{
printf("Hi");
return 0;
}
| Это заготовка статьи о программировании. Помогите Википедии, дополнив её. |
Для улучшения этой статьи желательно:
|