Що означає принцип Dependency Inversion?
Принцип інверсії залежностей (Dependency Inversion Principle, DIP) означає, що модулі високого рівня не повинні залежати від модулів низького рівня - обидва повинні залежати від абстракцій. А абстракції не повинні залежати від деталей, деталі повинні залежати від абстракцій.
Детальніше:
1. Модулі високого рівня не повинні залежати від деталей
Логіка застосунку (високий рівень) не повинна напряму залежати від конкретних реалізацій, наприклад:
- конкретної БД,
- конкретного HTTP-клієнта,
- конкретного способу логування. Інакше зміна інфраструктури ламає бізнес-логіку.
2. Деталі повинні залежати від абстракцій
Замість того щоб бізнес-код залежав від класу MySqlRepository,
він повинен залежати від інтерфейсу IRepository.
А вже конкретні реалізації (MySQL, Postgres, FileStorage) залежать від цієї абстракції.
3. Абстракції стабільні, реалізації мінливі
DIP говорить: Бізнес повинен спиратися на стабільні контракти, а мінливі деталі повинні підключатися до цих контрактів.
4. Мета принципу
- зменшити зв'язаність,
- підвищити гнучкість архітектури,
- спростити заміну реалізації,
- дозволити тестувати модулі ізольовано.
5. Формулювання в одній фразі
Не бізнес-логіка повинна знати про технічні деталі, а технічні деталі повинні підлаштовуватися під бізнес-логіку через абстракції.
Підсумок: DIP вимагає, щоб код залежав від абстракцій, а не від конкретних реалізацій. Це робить систему гнучкою, замінною і стійкою до змін інфраструктури.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.