Senior
Jaký je klíčový rozdíl mezi Dependency Inversion a Dependency Injection?
sobes.tech AI
Odpověď od AI
Princip inverze závislostí (princip inverze závislostí) je jedním z principů SOLID, který říká, že moduly vysoké úrovně by neměly záviset na modulech nízké úrovně, oba by měly záviset na abstrakcích. Abstrakce by neměly záviset na detailech, detaily by měly záviset na abstrakcích.
Vstřikování závislostí je konkrétní vzor nebo technika, která implementuje princip inverze závislostí. Je to způsob, jak předat závislosti (objekty) třídě nebo funkci zvenčí, namísto jejich vytváření uvnitř.
Příklad v Go:
// Abstrakce
type Notifier interface {
Notify(message string)
}
// Konkrétní implementace
type EmailNotifier struct {}
func (e EmailNotifier) Notify(message string) {
fmt.Println("Odesílání emailu s zprávou:", message)
}
// Vyšší modul
type UserService struct {
notifier Notifier // závisí na abstrakci
}
// Vstřikování závislostí přes konstruktor
func NewUserService(n Notifier) *UserService {
return &UserService{notifier: n}
}
func (s *UserService) RegisterUser(name string) {
// logika registrace
s.notifier.Notify("Uživatel registrován: " + name)
}
Zde je princip inverze závislostí dodržen prostřednictvím závislosti na rozhraní Notifier, a vstřikování závislostí je realizováno předáním konkrétní implementace EmailNotifier do konstruktoru UserService.