Ответ
Принцип инверсии зависимостей (DIP) гласит: модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций. Абстракции не должны зависеть от деталей, детали должны зависеть от абстракций.
Пример в Go (интерфейсы как абстракции):
type DB interface {
GetData() string
}
type MySQL struct{}
func (m MySQL) GetData() string { return "data from MySQL" }
type Service struct {
db DB
}
func NewService(db DB) *Service {
return &Service{db: db}
}
Здесь Service зависит от интерфейса DB, а не от конкретной реализации MySQL. Это позволяет легко подменять реализацию БД без изменения кода сервиса.
Видео-ответы
▶
▶
▶
▶
▶
▶