Назад к вопросам
Middle+
3
Чем отличаются Dependency Inversion и Dependency Injection?
Компании, где спрашивали
purrweb
Ответ от нейросети
sobes.tech AI
Dependency Inversion Principle (DIP) — это принцип проектирования, который говорит, что:
- Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба должны зависеть от абстракций.
- Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Это принцип, направленный на уменьшение связности и повышение гибкости кода.
Dependency Injection (DI) — это конкретный паттерн или техника реализации DIP, при которой зависимости (объекты, сервисы) передаются в класс извне, а не создаются внутри него.
Пример на Go:
// Интерфейс (абстракция)
type Notifier interface {
Notify(message string)
}
// Конкретная реализация
type EmailNotifier struct {}
func (e EmailNotifier) Notify(message string) {
fmt.Println("Sending email:", message)
}
// Класс, который зависит от абстракции
type UserService struct {
notifier Notifier
}
// Конструктор с внедрением зависимости
func NewUserService(n Notifier) *UserService {
return &UserService{notifier: n}
}
func (u *UserService) SendWelcome() {
u.notifier.Notify("Welcome!")
}
Здесь DIP — это принцип, который мы соблюдаем, а DI — способ передать зависимость (Notifier) в UserService извне.