Sobes.tech
Senior

Care este diferența cheie dintre Inversiunea Dependenței și Injecția de Dependență?

sobes.tech AI

Răspuns de la AI

Inversiunea Dependințelor (principiul inversiunii dependențelor) este unul dintre principiile SOLID, care afirmă că modulele de nivel înalt nu trebuie să depindă de modulele de nivel inferior, ambele trebuie să depindă de abstracții. Abstracțiile nu trebuie să depindă de detalii, detaliile trebuie să depindă de abstracții.

Injectarea de dependințe este un pattern sau tehnică concretă care implementează principiul inversiunii dependențelor. Este o modalitate de a transmite dependențele (obiecte) către o clasă sau funcție din exterior, în loc să le creeze în interior.

Cu alte cuvinte:

  • Inversiunea dependențelor este un concept sau principiu de proiectare.
  • Injectarea de dependințe este o modalitate de a implementa acest concept, când dependențele sunt transmise din exterior.

Exemplu în Go:

// Abstracție
 type Notifier interface {
    Notify(message string)
}

// Implementare concretă
 type EmailNotifier struct {}

func (e EmailNotifier) Notify(message string) {
    fmt.Println("Trimitere email cu mesaj:", message)
}

// Modul de nivel înalt
 type UserService struct {
    notifier Notifier // depinde de abstracție
}

// Injectarea de dependințe prin constructor
func NewUserService(n Notifier) *UserService {
    return &UserService{notifier: n}
}

func (s *UserService) RegisterUser(name string) {
    // logică de înregistrare
    s.notifier.Notify("Utilizator înregistrat: " + name)
}

Aici, principiul inversiunii dependențelor este respectat prin dependența de interfața Notifier, iar injectarea de dependințe se face prin transmiterea unei implementări concrete de EmailNotifier în constructorul UserService.