Sobes.tech
Senior

Kuo skiriasi Dependency Inversion ir Dependency Injection?

sobes.tech AI

Atsakymas iš AI

Priklausomybės inversija (priklausomybių inversijos principas) yra vienas iš SOLID principų, kuris sako, kad aukšto lygio moduliai neturėtų priklausyti nuo žemo lygio modulių, abu turėtų priklausyti nuo abstrakcijų. Abstrakcijos neturėtų priklausyti nuo detalių, detalės turėtų priklausyti nuo abstrakcijų.

Priklausomybių injekcija yra konkretus modelis arba technika, įgyvendinanti priklausomybių inversijos principą. Tai būdas perduoti priklausomybes (objektus) iš išorės į klasę arba funkciją, o ne kurti jas viduje.

Kitaip tariant:

  • Priklausomybių inversija yra koncepcija arba projektavimo principas.
  • Priklausomybių injekcija yra būdas įgyvendinti šį principą, kai priklausomybės perduodamos iš išorės.

Pavyzdys Go kalba:

// Abstrakcija
 type Notifier interface {
    Notify(message string)
}

// Konkretus įgyvendinimas
 type EmailNotifier struct {}

func (e EmailNotifier) Notify(message string) {
    fmt.Println("El. pašto siuntimas su žinute:", message)
}

// Aukšto lygio modulis
 type UserService struct {
    notifier Notifier // priklauso nuo abstrakcijos
}

// Priklausomybių injekcija per konstruktorių
func NewUserService(n Notifier) *UserService {
    return &UserService{notifier: n}
}

func (s *UserService) RegisterUser(name string) {
    // registracijos logika
    s.notifier.Notify("Naudotojas užregistruotas: " + name)
}

Čia, priklausomybės inversijos principas yra įgyvendintas per priklausomybę nuo Notifier sąsajos, o priklausomybių injekcija atliekama perduodant konkretų EmailNotifier į UserService konstruktorių.