Sobes.tech
Senior

Jaka jest kluczowa różnica między Dependency Inversion a Dependency Injection?

sobes.tech AI

Odpowiedź od AI

Odwrócenie zależności (zasada odwracania zależności) jest jednym z zasad SOLID, które mówią, że moduły wysokiego poziomu nie powinny zależeć od modułów niskiego poziomu, oba powinny zależeć od abstrakcji. Abstrakcje nie powinny zależeć od szczegółów, szczegóły powinny zależeć od abstrakcji.

Wstrzykiwanie zależności to konkretny wzorzec lub technika implementująca zasadę odwracania zależności. To sposób przekazywania zależności (obiektów) do klasy lub funkcji z zewnątrz, a nie ich tworzenia wewnątrz.

Przykład w Go:

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

// Konkretna implementacja
 type EmailNotifier struct {}

func (e EmailNotifier) Notify(message string) {
    fmt.Println("Wysyłanie emaila z wiadomością:", message)
}

// Moduł wysokiego poziomu
 type UserService struct {
    notifier Notifier // zależy od abstrakcji
}

// Wstrzykiwanie zależności przez konstruktor
func NewUserService(n Notifier) *UserService {
    return &UserService{notifier: n}
}

func (s *UserService) RegisterUser(name string) {
    // logika rejestracji
    s.notifier.Notify("Użytkownik zarejestrowany: " + name)
}

Tutaj zasada odwracania zależności jest spełniona przez zależność od interfejsu Notifier, a wstrzykiwanie zależności odbywa się przez przekazanie konkretnej implementacji EmailNotifier do konstruktora UserService.