Впровадження залежностей (dependency injection)
Коротко: За впровадження залежностей об’єкту передається те, що йому потрібно, ззовні, замість того щоб створювати це самому, — зазвичай через конструктор.
Докладніше: У результаті клас залежить лише від інтерфейсу, а не від конкретної реалізації. Конкретний варіант обирається в одному центральному місці. Це знижує зв’язаність, робить код замінним і лише тоді по-справжньому тестованим (модульні тести отримують моки замість справжніх баз даних).
Подробиці
# без DI: жорстка прив’язка
class ReportДив. також: SOLID, інтерфейс, модульний тест, абстракція