Sobes.tech
Back to questions
Middle+
4

Чем отличаются Dependency Inversion и Dependency Injection?

Companies where asked
purrweb

Answer from AI

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 извне.