Dependency Injection (DI) sık sık nesne yönelimli programlama (OOP) mülakat sorularında karşıma çıkıyor. Bu kavram nedir açıklayabilir misiniz?
comments
2 references
// Comments are closed.
Dependency Injection (DI) sık sık nesne yönelimli programlama (OOP) mülakat sorularında karşıma çıkıyor. Bu kavram nedir açıklayabilir misiniz?
// Comments are closed.
İsminden de anlaşılacağı gibi, kodun veya sınıfın bağımlı olduğu değerdir.
Örneğin; Y sınıfında, X sınıfına bağımlı olan bir kod bulunuyor (bir metot veya değişken olabilir). Bunu static veya çeşitli yöntemler ile çekmek yerine bağımlılığı metodu kullanırken belirtmeliyiz. Eğer sınıfın tamamı/çoğu bir şeye bağımlıysa, const veya setter ile belirtip onun üzerinden çalışabiliriz ya da tek bir metot bağımlıysa, o metodun parametrelerinde bağımlılığını belirtebiliriz.
Açıklama veya örnekleme çok net olmadıysa aşağıdaki linkten okursanız çok net bir şekilde anlayacağınızdan eminim.
https://en.wikipedia.org/wiki/Dependency_injection#Examples
Efe güzel bir cevap vermiş. Ben de biraz daha gerçek hayat örnekleriyle açıklayayım.
Kelime anlamlarına bakalım:
Dependency: Bağımlılık
Injection: Iğne, zerk etmek
Kısa tanım; ihtiyacın olan sınıf bağımlılıklarını görünmez el (uygulama çatısı, örneğin spring framework) tarafınan oluşturulup gerekli değişkenlere atanıp senin için hazır hale getirilmesi.
Biraz daha teknik örnekle ilerleyelim.
Spring/java üzerinden anlatayım.
Bir context/scope üzerinde birbirine bağlı sınıflarımız olduğunu düşünelim.
Mesela en basit örnek; rest servis ile bir bilgi alıp o bilgiyi veri tabanına aktaracaksın. Servisden bilgi almak için bir controller sınıfın, veri tabanına bilgiyi basmak için de bir repository sınıfın olduğunu düşünelim.
Veri tabanına atacağın sınıfı nasıl oluşturursun?
İlk seçenek
Burda bir repository oluşturdun ve bir metodunu çağırdın. Senin XXController sınıfın Repository sınıfına bağımlı olduğu için bu ikisini senin hafızada yaratman yerine işlemi Spring (ya da hangi çatıyı kullanıyorsan) çatısına bırakman daha kolay ve performanslı oluyor.
Burada gördüğün @Autowired diye belirlediğin alanı Spring senin için hazırlayıp bu değişkene atayıp senin kullanımına sunuyor.
Bu işem dependency injection olarak isimlendiriliyor.
Neden kullanırsın?