Aký je kľúčový rozdiel medzi Inverziou závislostí a Injektážou závislostí?
sobes.tech AI
Odpoveď od AI
Inverzia závislostí (princip inverzie závislostí) je jeden z princípov SOLID, ktorý hovorí, že moduly vysokého levelu by nemali závisieť od modulov nízkeho levelu, oba by mali závisieť od abstrakcií. Abstrakcie by nemali závisieť od detailov, detaily by mali závisieť od abstrakcií.
Vstrekovanie závislostí je konkrétny vzor alebo technika, ktorá implementuje princíp inverzie závislostí. Je to spôsob, ako prenášať závislosti (objekty) do triedy alebo funkcie zvonku, namiesto ich vytvárania vo vnútri.
Inými slovami:
- Inverzia závislostí je koncept alebo princíp návrhu.
- Vstrekovanie závislostí je spôsob implementácie tohto konceptu, keď sa závislosti prenášajú zvonku.
Príklad v Go:
// Abstrakcia
type Notifier interface {
Notify(message string)
}
// Konkrétna implementácia
type EmailNotifier struct {}
func (e EmailNotifier) Notify(message string) {
fmt.Println("Odosielanie emailu so správou:", message)
}
// Modul vysokého levelu
type UserService struct {
notifier Notifier // závisí od abstrakcie
}
// Vstrekovanie závislostí cez konštruktor
func NewUserService(n Notifier) *UserService {
return &UserService{notifier: n}
}
func (s *UserService) RegisterUser(name string) {
// logika registrácie
s.notifier.Notify("Používateľ zaregistrovaný: " + name)
}
Tu je princíp inverzie závislostí dodržaný prostredníctvom závislosti od rozhrania Notifier, a vstrekovanie závislostí sa vykonáva odovzdaním konkrétnej implementácie EmailNotifier do konštruktora UserService.