Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що означає принцип Inversion of Control (IoC)?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Inversion of Control (IoC)** - це принцип проектування, згідно з яким об'єкт не контролює напряму свої залежності та потік виконання, а передає цей контроль зовнішній системі чи фреймворку: він не створює сам те, що йому потрібно, а отримує це ззовні. **Ключове:** IoC - це не конкретний патерн, а загальний принцип архітектури, який послаблює зв'язність між компонентами і підвищує гнучкість та тестованість системи.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Inversion of Control (IoC)** - це принцип проектування, згідно з яким об'єкт не контролює напряму свої залежності та потік виконання, а передає цей контроль зовнішній системі чи фреймворку. Іншими словами, **об'єкт не створює сам те, що йому потрібно для роботи, а отримує це ззовні**. Головна ідея - **інверсія управління**: раніше програма викликала фреймворк, тепер фреймворк викликає програму. --- ### Основна суть У традиційному імперативному підході розробник сам керує створенням об'єктів, їх ініціалізацією та взаємодією. В IoC же цей контроль "перевертається": тепер **контейнер або фреймворк** керує життєвим циклом об'єктів, їх залежностями та викликами. --- ### Приклад без IoC ```python class UserService: def __init__(self): self.repository = UserRepository() # залежність створюється вручну def get_user(self, user_id): return self.repository.find_by_id(user_id) ``` Тут `UserService` сам створює `UserRepository`. Це жорсткий зв'язок (tight coupling): замінити репозиторій чи протестувати код складно. --- ### Приклад з IoC ```python class UserService: def __init__(self, repository): self.repository = repository # залежність передається ззовні (через конструктор) ``` Тепер хтось **зовні** вирішує, який саме репозиторій підставити, наприклад тестовий чи реальний. Управління залежністю інвертовано. --- ### Де використовується IoC - У **фреймворках** (Spring, .NET Core, Django): розробник пише логіку, а фреймворк викликає її в потрібний момент. - У **контейнерах залежностей (IoC Containers)**: вони створюють і пов'язують об'єкти, впроваджують залежності. - У **подієвих системах**: код реагує на події, а не керує потоком виконання. --- ### Види реалізації IoC 1. **Dependency Injection (DI)** - найпоширеніший спосіб, коли залежності впроваджуються через конструктор, властивості або методи. 2. **Service Locator** - залежності запитуються у централізованого об'єкта (менш бажаний варіант). 3. **Event-driven IoC** - управління передається подієвій моделі, де код викликається при настанні подій. --- ### Ключова користь - Ослаблення зв'язності між компонентами (low coupling). - Спрощення тестування та підміни залежностей. - Підвищення гнучкості та розширюваності системи. - Можливість фреймворку керувати інфраструктурними завданнями (життєвий цикл, кешування, логування). --- **Підсумок:** *IoC - це не конкретний патерн, а загальний принцип архітектури, згідно з яким об'єкт не керує своїми залежностями, а отримує їх ззовні. Це інверсія контролю над створенням і зв'язуванням компонентів, що забезпечує гнучкість і тестованість системи.*Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.