Sobes.tech
Senior

Qual è la differenza chiave tra Dependency Inversion e Dependency Injection?

sobes.tech AI

Risposta dell'AI

Inversione delle Dipendenze (principio di inversione delle dipendenze) è uno dei principi SOLID, che afferma che i moduli di alto livello non devono dipendere da quelli di basso livello, entrambi devono dipendere da astrazioni. Le astrazioni non devono dipendere dai dettagli, i dettagli devono dipendere dalle astrazioni.

L'Iniezione delle Dipendenze è un pattern o tecnica concreta che implementa il principio di inversione delle dipendenze. È un modo di passare le dipendenze (oggetti) a una classe o funzione dall'esterno, invece di crearle internamente.

In altre parole:

  • L'inversione delle dipendenze è un concetto o principio di progettazione.
  • L'iniezione delle dipendenze è un modo di implementare questo concetto, quando le dipendenze vengono passate dall'esterno.

Esempio in Go:

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

// Implementazione concreta
 type EmailNotifier struct {}

func (e EmailNotifier) Notify(message string) {
    fmt.Println("Invio email con messaggio:", message)
}

// Modulo di alto livello
 type UserService struct {
    notifier Notifier // dipende dall'astrazione
}

// Iniezione delle dipendenze tramite costruttore
func NewUserService(n Notifier) *UserService {
    return &UserService{notifier: n}
}

func (s *UserService) RegisterUser(name string) {
    // logica di registrazione
    s.notifier.Notify("Utente registrato: " + name)
}

Qui, il principio di inversione delle dipendenze è rispettato tramite la dipendenza dall'interfaccia Notifier, e l'iniezione delle dipendenze avviene passando un'implementazione concreta di EmailNotifier nel costruttore di UserService.