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.