Внедрение зависимостей
Класс не создаёт свои зависимости сам, а получает их снаружи.
Код становится тестируемым (в тестах зависимости подменяют моками), слабосвязанным и гибким. Крупные фреймворки (Spring, Angular, ASP.NET) строят свою архитектуру вокруг DI-контейнеров.