Sobes.tech
Senior

Bağımlılıkların Tersine Çevrilmesi ile Bağımlılık Enjeksiyonu arasındaki temel fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bağımlılıkların Tersine Çevrilmesi (Bağımlılıkların Tersine Çevrilmesi ilkesi), SOLID ilkelerinden biridir ve yüksek seviyeli modüllerin düşük seviyeli modüllere bağımlı olmaması gerektiğini, her ikisinin de soyutlamalara bağımlı olması gerektiğini söyler. Soyutlamalar detaylara bağlı olmamalı, detaylar soyutlamalara bağlı olmalı.

Bağımlılık Enjeksiyonu, Bağımlılıkların Tersine Çevrilmesi ilkesini uygulayan somut bir desen veya tekniktir. Bu, bağımlılıkların (nesnelerin) bir sınıfa veya fonksiyona dışarıdan aktarılmasıdır, içerde oluşturulması yerine.

Başka bir deyişle:

  • Bağımlılıkların Tersine Çevrilmesi, bir kavram veya tasarım ilkesidir.
  • Bağımlılık Enjeksiyonu, bu kavramın uygulanma şeklidir, bağımlılıkların dışarıdan aktarılmasıyla.

Go dilinde örnek:

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

// Somut uygulama
 type EmailNotifier struct {}

func (e EmailNotifier) Notify(message string) {
    fmt.Println("Mesaj ile e-posta gönderiliyor:", message)
}

// Yüksek seviyeli modül
 type UserService struct {
    notifier Notifier // soyutlamadan bağımlı
}

// Yapıcı fonksiyon ile bağımlılık enjeksiyonu
func NewUserService(n Notifier) *UserService {
    return &UserService{notifier: n}
}

func (s *UserService) RegisterUser(name string) {
    // kayıt mantığı
    s.notifier.Notify("Kullanıcı kaydedildi: " + name)
}

Burada, Bağımlılıkların Tersine Çevrilmesi ilkesi, Notifier arayüzüne bağımlılık sayesinde sağlanır ve bağımlılık enjeksiyonu, EmailNotifier somut uygulamasının UserService yapıcısına geçirilmesiyle gerçekleşir.