Sobes.tech
Senior

Asılılıq İnversiyası və Asılılıq Enjeksiyası arasındakı əsas fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Asılılıq İstiqamətinin Əksinə Çevrilməsi (asılılıqların istiqamətinin əksinə çevrilməsi prinsipi) SOLID prinsiplərindən biridir və yüksək səviyyəli modulların aşağı səviyyəli modullara deyil, hər ikisinin abstraksiyalara bağlı olması lazım olduğunu bildirir. Abstraksiyalar detallara bağlı olmamalıdır, detallər abstraksiyalara bağlı olmalıdır.

Asılılıq İstiqamətinin Enjeksiyası (Dependency Injection) bu prinsipi həyata keçirən konkret bir nümunə və ya texnikadır. Bu, asılılıqları (obyektləri) xaricdən bir sinfə və ya funksiyaya ötürmək, içəridə yaratmaq yerinə.

Başqa sözlə:

  • Asılılıq İstiqamətinin Əksinə Çevrilməsi bir konsept və ya dizayn prinsipidir.
  • Dependency Injection bu konsepti həyata keçirmənin bir yoludur, asılılıqlar xaricdən ötürülür.

Go dilində nümunə:

// Abstraksiya
 type Notifier interface {
    Notify(message string)
}

// Konkret tətbiq
 type EmailNotifier struct {}

func (e EmailNotifier) Notify(message string) {
    fmt.Println("Mesaj ilə email göndərilir:", message)
}

// Yüksək səviyyəli modul
 type UserService struct {
    notifier Notifier // abstraksiyaya bağlıdır
}

// Konstruktor vasitəsilə Dependency Injection
func NewUserService(n Notifier) *UserService {
    return &UserService{notifier: n}
}

func (s *UserService) RegisterUser(name string) {
    // qeydiyyat loqikası
    s.notifier.Notify("İstifadəçi qeydiyyatdan keçdi: " + name)
}

Burada, Asılılıq İstiqamətinin Əksinə Çevrilməsi prinsipi Notifier interfeysinə bağlılıq vasitəsilə təmin edilir və Dependency Injection EmailNotifier-in konkret tətbiqinin UserService konstruktoruna ötürülməsi ilə həyata keçirilir.