Sobes.tech
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.