Dependency Inversion менен Dependency Injection ортосундагы негизги айырма эмнеде?
sobes.tech AI
AIден жооп
Байланыштуулуктун тесөө (Dependency Inversion) — бул SOLID принциптеринин бири, ал жогорку деңгээлдеги модулдар төмөнкү деңгээлдеги модулдарга көз каранды болбошу керек экенин, экөө тең абстракциялардан көз каранды болушу керектигин айтат. Абстракциялар деталдарга көз каранды болбошу керек, деталдар абстракциялардан көз каранды болушу керек.
Dependency Injection — бул бул принципти ишке ашыруу үчүн колдонулган конкреттүү үлгү же техника. Бул — көз карандылыктарды (объекттерди) класс же функцияга сырттан өткөрүү жолу, ички түзүү эмес.
Башкача айтканда:
- Dependency Inversion — бул долбоорлоо концепциясы же принциби.
- Dependency Injection — бул бул концепцияны ишке ашыруу жолу, көз карандылыктар сырттан өткөрүлөт.
Go тилинде мисал:
// Абстракция
type Notifier interface {
Notify(message string)
}
// Конкреттүү ишке ашыруу
type EmailNotifier struct {}
func (e EmailNotifier) Notify(message string) {
fmt.Println("Электрондук почта жөнөтүү менен билдирүү:", message)
}
// Жогорку деңгээлдеги модуль
type UserService struct {
notifier Notifier // абстракцияга көз каранды
}
// Dependency Injection конструктор аркылуу
func NewUserService(n Notifier) *UserService {
return &UserService{notifier: n}
}
func (s *UserService) RegisterUser(name string) {
// каттоо логикасы
s.notifier.Notify("Колдонуучу катталды: " + name)
}
Бул жерде, Dependency Inversion принциби Notifier интерфейсине көз каранды болуу аркылуу сакталат, жана Dependency Injection конкреттүү EmailNotifier ишке ашырылышын UserService конструкторуна өткөрүү менен ишке ашырылат.