Kontrolün tersine çevrilmesi (IoC) ile Bağımlılık Enjeksiyonu arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kontrolün Ters Çevrilmesi (IoC), programın kontrol akışının değiştiği genel bir tasarım ilkesidir: bağımlılıkları ve çağrı mantığını açıkça yönetmek yerine, bu akışı yöneten harici bir çerçeve veya konteynıra güvenilir.
Bağımlılık Enjeksiyonu (DI), IoC ilkesini uygulayan belirli desenlerden biridir. Bu, bağımlılıkların (mevcut bileşenin bağımlı olduğu nesneler) dışarıdan bileşene aktarılmasıdır, bileşenin kendisinin oluşturması veya araması yerine.
Bu nedenle, DI, IoC'yi başarmanın bir yoludur.
Ana farklar:
- IoC — ilke/kavram.
- DI — desen/uygulama.
- IoC, farklı şekillerde uygulanabilir (örneğin, fabrika yöntemi, hizmet bulucu), DI bunlardan biridir.
- IoC, nesnelerin oluşturulması ve bağlanması sorumluluğunu bileşenden framework veya konteynır'a kaydırır.
- DI, bu kaydırmayı, bağımlılıkları yapıcı, ayar veya arayüz aracılığıyla geçirerek gerçekleştirir.
DI örneği (yapıcı):
// Service bağımlı sınıf
public class Client {
private final Service service;
// Yapıcı, bağımlılığı (Service) alır
public Client(Service service) {
this.service = service;
}
public void doSomething() {
service.execute();
}
}
// Bağımlılık arayüzü
public interface Service {
void execute();
}
// Bağımlılığın somut uygulaması
public class ServiceImpl implements Service {
@Override
public void execute() {
System.out.println("Servis çalıştırılıyor...");
}
}
// "Enjeksiyon" sorumlu sınıf
public class AppConfig {
public static void main(String[] args) {
Service myService = new ServiceImpl(); // Bağımlılığı oluştur
Client client = new Client(myService); // Yapıcı aracılığıyla bağımlılığı enjekte et
client.doSomething();
}
}
Bu örnekte, Client sınıfı doğrudan ServiceImpl oluşturmaz. Bunun yerine, ServiceImpl başka bir yerde (AppConfig) oluşturulur ve Client'a yapıcı aracılığıyla geçirilir (enjekte edilir). Bu, IoC ilkesini uygular, çünkü Service'in oluşturulması ve bağlanması kontrolü tersine çevrilmiştir — bu Client'ta değildir.