Назад к вопросам
Senior
4
Чем отличается Dependency Injection от Dependency Inversion?
Компании, где спрашивали
purweb
Ответ от нейросети
sobes.tech AI
Dependency Injection (DI) — это паттерн проектирования, при котором зависимости объекта передаются ему извне, а не создаются внутри. Это позволяет легко менять реализации зависимостей и упрощает тестирование.
Dependency Inversion Principle (DIP) — один из принципов SOLID, который гласит, что:
- Модули высокого уровня не должны зависеть от модулей низкого уровня; оба должны зависеть от абстракций.
- Абстракции не должны зависеть от деталей, детали должны зависеть от абстракций.
DI — способ реализации DIP. То есть DIP — это принцип архитектуры, а DI — конкретный способ внедрения зависимостей, который помогает следовать этому принципу.
Пример на 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
}
// Внедрение зависимости через конструктор (DI)
func NewUserService(n Notifier) *UserService {
return &UserService{notifier: n}
}
func (u *UserService) SendNotification(msg string) {
u.notifier.Notify(msg)
}
Здесь DIP соблюдается за счет зависимости от интерфейса Notifier, а DI — за счет передачи конкретной реализации извне.