tgoop.com/Java_Iibrary/1783
Last Update:
Представь, что ты на собеседовании по Spring. Тебя спрашивают: Dependency Inversion vs Inversion of Control vs Dependency Injection. Это одно и то же? Как бы ты ответил?
Dependency Inversion Principle (DIP) это принцип из SOLID. Суть в том, что высокоуровневые модули не должны зависеть от низкоуровневых. Оба должны зависеть от абстракций. Это делает код гибким и удобным для тестирования.
Inversion of Control (IoC) это архитектурный стиль. Обычно твой код сам управляет созданием и связями объектов. При IoC этот контроль передаётся фреймворку или контейнеру. Он решает, когда и как связать объекты.
Dependency Injection (DI) это конкретный способ реализовать IoC. Фреймворк подсовывает нужные зависимости в класс, чаще всего через конструктор или сеттер.
Можно представить это как уровни:
- DIP задаёт правило проектирования
- IoC меняет то, кто управляет созданием объектов
- DI это инструмент, которым фреймворки делают этот перенос
Итог для собеседования: DIP = принцип, IoC = стиль, DI = техника.