Sobes.tech
Senior

Тафовутҳои асосии байни Dependency Inversion ва Dependency Injection чист?

sobes.tech AI

Ҷавоб аз AI

Инверсияи вобастагӣ (принсипи инверсияи вобастагӣ) яке аз принсипҳои SOLID мебошад, ки мегӯяд, ки модулҳои сатҳи баланд набояд аз модулҳои сатҳи паст вобаста бошанд, ҳарду бояд аз абстраксияҳо вобаста бошанд. Абстраксияҳо набояд аз тафсилот вобаста бошанд, тафсилот бояд аз абстраксияҳо вобаста бошанд.

Вобастагии воридотӣ (Dependency Injection) намунаи ё техникаи мушаххасест, ки принсипи инверсияи вобастагӣро амалӣ мекунад. Ин роҳи интиқоли вобастагиҳо (объектҳо) ба класе ё функсия аз берун аст, на дар дохили он.

Ба ибораи дигар:

  • Инверсияи вобастагӣ як консепт ё принсипи тарҳрезист.
  • Вобастагии воридотӣ роҳи амалӣ кардани ин консепт аст, вақте вобастагиҳо аз берун гузаронида мешаванд.

Масалан дар Go:

// Абстраксия
 type Notifier interface {
    Notify(message string)
}

// Амалӣ кардани мушаххас
 type EmailNotifier struct {}

func (e EmailNotifier) Notify(message string) {
    fmt.Println("Почтаи электронӣ бо паём фиристода мешавад:", message)
}

// Модул дар сатҳи баланд
 type UserService struct {
    notifier Notifier // вобаста ба абстраксия
}

// Ворид кардани вобастагиро тавассути конструктор
func NewUserService(n Notifier) *UserService {
    return &UserService{notifier: n}
}

func (s *UserService) RegisterUser(name string) {
    // логикаи сабти корбар
    s.notifier.Notify("Корбар сабт шуд: " + name)
}

Ин ҷо принсипи инверсияи вобастагӣ тавассути вобастагӣ ба интерфейси Notifier таъмин карда мешавад, ва ворид кардани вобастагиро тавассути гузаронидани иҷрои мушаххаси EmailNotifier ба конструктори UserService амалӣ мекунад.