Senior
Kāda ir galvenā atšķirība starp Dependency Inversion un Dependency Injection?
sobes.tech AI
Atbilde no AI
Atkarības apgriešana (atkarību apgriešanas princips) ir viens no SOLID principiem, kas saka, ka augstākā līmeņa moduļiem nevajadzētu būt atkarīgiem no zemākā līmeņa moduļiem, abi jābūt atkarīgiem no abstrakcijām. Abstrakcijas nevajadzētu būt atkarīgām no detaļām, detaļas jābūt atkarīgām no abstrakcijām.
Atkarību injekcija ir konkrēts modelis vai tehnika, kas īsteno atkarību apgriešanas principu. Tā ir veids, kā ārpusē nodot atkarības (objektus) klasei vai funkcijai, nevis tās radīt iekšpusē.
Citiem vārdiem:
- Atkarību apgriešana ir koncepcija vai dizaina princips.
- Atkarību injekcija ir veids, kā īstenot šo koncepciju, kad atkarības tiek nodotas no ārpuses.
Piemērs Go valodā:
// Abstrakcija
type Notifier interface {
Notify(message string)
}
// Konkrēta realizācija
type EmailNotifier struct {}
func (e EmailNotifier) Notify(message string) {
fmt.Println("E-pasta sūtīšana ar ziņu:", message)
}
// Augstākā līmeņa modulis
type UserService struct {
notifier Notifier // atkarīgs no abstrakcijas
}
// Atkarību injekcija caur konstruktoru
func NewUserService(n Notifier) *UserService {
return &UserService{notifier: n}
}
func (s *UserService) RegisterUser(name string) {
// reģistrācijas loģika
s.notifier.Notify("Lietotājs reģistrēts: " + name)
}
Šeit, atkarību apgriešanas princips tiek ievērots, atkarībā no Notifier saskarnes, un atkarību injekcija tiek veikta, nododot konkrētu EmailNotifier realizāciju UserService konstruktoram.