Урок 5: DIP и внедрение зависимостей
Бизнес-класс, который создаёт new SmtpMailer() внутри себя, приварен к одному поставщику: вы не можете протестировать его без настоящего почтового сервера и не можете сменить поставщика, не редактируя его. В этом уроке мы инвертируем направление зависимости: сервис зависит от интерфейса, а реализаци
DIP — это как розетка: лампа не припаяна к электростанции — обе стороны подключаются к стандартной вилке, поэтому любую сторону можно заменить, не трогая другую.
- Принцип инверсии зависимостей (DIP)
- Бизнес-логика зависит от абстрактного интерфейса, а конкретная реализация внедряется извне — поэтому инфраструктуру можно легко менять и тестировать.
- внедрение через конструктор
- Паттерн, в котором зависимость входит как параметр конструктора и хранится в приватном readonly-поле — тот, кто компонует приложение, выбирает реализацию.