Dependency Inversion va Dependency Injection o'rtasidagi asosiy farq nima?
sobes.tech AI
AIdan javob
Dependency Inversion (bog'liq bo'lish prinsipi) SOLID prinsiplardan biri bo'lib, yuqori darajali modullar past darajali modullarga bog'liq bo'lmasligi, ikkalasi ham abstraktsiyalarga bog'liq bo'lishi kerakligini aytadi. Abstraktsiyalar detallarga bog'liq bo'lmasligi kerak, detallarga bog'liq bo'lishi kerak.
Dependency Injection — bu Dependency Inversion prinsipini amalga oshiradigan aniq shablon yoki texnikadir. Bu, bog'liqliklarni (obyektlarni) tashqaridan sinf yoki funktsiyaga o'tkazish usuli, ichkarida yaratish o'rniga.
Boshqacha qilib aytganda:
- Dependency Inversion — bu dizayn konsepti yoki prinsipi.
- Dependency Injection — bu bu konseptni amalga oshirish usuli, bog'liqliklar tashqaridan o'tkaziladi.
Go tilida misol:
// Abstraktsiya
type Notifier interface {
Notify(message string)
}
// Aniq amalga oshirish
type EmailNotifier struct {}
func (e EmailNotifier) Notify(message string) {
fmt.Println("Xabar bilan email yuborilmoqda:", message)
}
// Yuqori darajali modul
type UserService struct {
notifier Notifier // abstraksiyaga bog'liq
}
// Konstruktor orqali Dependency Injection
func NewUserService(n Notifier) *UserService {
return &UserService{notifier: n}
}
func (s *UserService) RegisterUser(name string) {
// ro'yxatdan o'tish logikasi
s.notifier.Notify("Foydalanuvchi ro'yxatdan o'tdi: " + name)
}
Bu yerda, Dependency Inversion prinsipi Notifier interfeysiga bog'liqlik orqali bajariladi, va Dependency Injection EmailNotifier ning konkret amalga oshirilishi UserService konstruktoriga o'tkazilishi bilan amalga oshadi.