Sobes.tech
Senior

Was ist der entscheidende Unterschied zwischen Dependency Inversion und Dependency Injection?

sobes.tech KI

Antwort von AI

Dependency Inversion (Prinzip der Inversion der Abhängigkeiten) ist eines der SOLID-Prinzipien, das besagt, dass Hoch- und Niedrig-Level-Module nicht voneinander abhängig sein sollten, sondern beide von Abstraktionen abhängen sollten. Abstraktionen sollten nicht von Details abhängen, Details sollten von Abstraktionen abhängen.

Dependency Injection ist ein konkretes Muster oder eine Technik, die das Prinzip der Dependency Inversion umsetzt. Es ist eine Methode, Abhängigkeiten (Objekte) von außen an eine Klasse oder Funktion zu übergeben, anstatt sie intern zu erstellen.

Mit anderen Worten:

  • Dependency Inversion ist ein Konzept oder Prinzip des Designs.
  • Dependency Injection ist eine Art, dieses Konzept umzusetzen, bei dem Abhängigkeiten von außen übergeben werden.

Beispiel in Go:

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

// Konkrete Implementierung
 type EmailNotifier struct {}

func (e EmailNotifier) Notify(message string) {
    fmt.Println("E-Mail senden mit Nachricht:", message)
}

// Hochrangiges Modul
 type UserService struct {
    notifier Notifier // hängt von der Abstraktion ab
}

// Dependency Injection über den Konstruktor
func NewUserService(n Notifier) *UserService {
    return &UserService{notifier: n}
}

func (s *UserService) RegisterUser(name string) {
    // Registrierungslogik
    s.notifier.Notify("Benutzer registriert: " + name)
}

Hier wird das Prinzip der Dependency Inversion durch die Abhängigkeit von der Schnittstelle Notifier eingehalten, und Dependency Injection erfolgt durch das Übergeben einer konkreten Implementierung von EmailNotifier im Konstruktor von UserService.