Java / Spring'de Kontrol ve Bağımlılık Enjeksiyonunun Tersine Çevirilmesi

İçindekiler
Bu, okuyucuyu Spring Framework kullanımına hazırlamak için Java dilinin temel konularını gözden geçirmeye odaklanan bir dizi öğreticinin dördüncü bölümüdür. Bu eğitim serisinin ilk bölümüne buradan, ikinci bölümüne buradan, üçüncü bölümüne ise buradan ulaşabilirsiniz. Bu derste Spring'i doğru kullanmak istiyorsak ele almamız gereken 2 temel kavramı göreceğiz: Inversion of Control ve Dependency Injection.
Öncelikle bu kavramların bu makalede Martin Fowler tarafından çok daha iyi açıklandığını ve bu sayfada İspanyolca'ya çevrildiğini açıklamak istiyorum ama amacım kavramı kolayca anlaşılır kılmak için özetlemeye çalışmak ve sizi biraz okumaktan kurtarmaktır. makale (ancak daha fazla sorunuz varsa okumaya davetlisiniz).
Terim nispeten yenidir, ancak tek bir programcının (veya programcı grubunun) bir dizi adım veya hesaplama talimatı yazmak için oturduğu saf sıralı programlama kullanılarak oluşturulan programlara geri dönen bir programlama modelidir. son bir sonuç elde etme niyetiyle baştan sona.
Şu anda (uzun yıllar önce olduğunu düşünmeyin) metotlara ve kütüphanelere yapılan çağrılar her zaman aynı programdaki tüm değişkenleri manipüle etmekten sorumlu olan merkezi bir kaynaktan geliyordu. Daha sonra, programa veri girişlerini yönetmekten sorumlu olan grafik arayüzler geliştirildi, programın ana akışı, grafik arayüzde meydana gelen olaylar için işleyici sağlamaktan sorumluydu (tıklandığında, bu tuşa basıldığında bir şeyi etkinleştirir) , fareyi hareket ettirme vb.) arabirim sabit bir döngüdeyken. Bu şekilde programın kontrolü tersine çevrilir, grafiksel arayüz, tam olarak NASIL yapıldığını bilmeye gerek kalmadan neyin ve nasıl yapılacağının ana akışını bildirmekten sorumludur.
Dikkat ederseniz, Java'daki arabirimler, bir uygulamanın denetimini harici aracılara aktarmanıza yardımcı olabilir, ancak kavram, bir olayın gerçekleşmesini bekleyen arka plan programı iş parçacıklarına uygulanabilir, diğer sınıfların uygulamalarını başlatmaktan ve teslim etmekten sorumlu bir sınıf. program (fabrika modeli) ve esasen programın kontrolünün bazı harici ajanlara iletilmesine izin veren herhangi bir model.
A sınıfının derlenme anında hangi nesneyi kullanacağını bilmediği, ancak yalnızca o nesneyle yapması gereken eylemleri bildiği belirli bir Kontrol Tersine Çevirme türüdür. Aşağıdaki sınıfı (önceki öğreticimde oluşturulan sınıflara dayanan) varsayalım:
 kamu sınıfı Ressam {kamu Meydanı meydanı; public Cartoonist() {square = new Square(); } public void MasterDraw () {square.Draw (); }} 

Göreceğiniz gibi, bu "Draftsman" sınıfı, daha sonra kullanacağı square nesnesinin yaşam döngüsünden sorumlu olduğu için tamamen "Square" sınıfına bağlıdır. Bir "Draftsman" sınıfı yaratmanın bu yolu çok pratik değildir, çünkü eğer daha sonra Draftsman'ın dikdörtgenler veya üçgenler çizmesini istersek, bunu yapmak için temel kodu değiştirmemiz gerekecekti.
Bunun yerine, bir önceki derste oluşturduğumuz "Çizilebilir" arabirimi uygularsak, daha yeniden kullanılabilir bir sınıf oluşturabiliriz:
 public class Draftsman {public Drawable çizim; genel Ressam (Çizilebilir d) {çizim = d; } public void MasterDrawing () {drawing.Drawing (); }} 

Bu şekilde "Draftsman" sınıfının nesneleri çizmek zorunda oldukları nesneyi "kontrol etmezler", sadece Drawable arabirimini uyguladığını ve daha sonra uygulamamda oluşturacağım bu "Draftsman" nesnelerini veya birisinin else nesne kitaplığıma erişen bir uygulamada kullanılacaksa, "Çizilebilir" arabirimi uygulayan herhangi bir nesneyi mükemmel bir şekilde alabilirler.
Önceki örnekte olarak bilinen şeyi uyguluyoruz. "Yapıcı Inyection" bağımlılık yapıcı düzeyinde enjekte edildiğinden, ancak bağımlılığı "Ayarlayıcılar" aracılığıyla da enjekte edebilirsiniz veya diğer programlama dillerinde parametreleri veya arayüzleri enjekte edebilirsiniz (Java'da parametreleri veya kabul eden arayüzleri değiştiremezsiniz. çalışma zamanında bir yöntem, ancak örneğin Python, yöntemlerin parametrelerin türünü belirtmeden parametreleri kabul etmesine izin verir.)
 public class Draftsman {public Drawable çizim; public void setDrawing (Çizilebilir d) {drawing = d; } public void MasterDrawing () {drawing.Drawing (); }} 

NS bağımlılık enjeksiyonu temelde programınızın işlevlerinin ayrılmasını sağlar. Bu bağımsızlık, sınıflarınızı herhangi bir şeye bağlı olmadan (tekrar etmeye değer) olmadan sınıflarınızı test etmenize olanak tanır. Bu bağımsızlık, kullanılacak anahtar parçalardan biridir. Bahar, bileşenler uygulamaya değil çerçeveye bağlıdır, uygulamanızın dışında var olan nesneler oluşturabilir ve bunları yalnızca ihtiyacınız olduğunda kullanabilirsiniz.
Bir sonraki eğitimden itibaren doğrudan Spring ile çalışmaya başlayacağız ve şimdiye kadar gördüğümüz tüm kavramların işleyişi ile nasıl ilişkili olduğunu göreceksiniz ve gerekli uzmanlığı kısa sürede edinmenizi sağlayacak.
Yorumlarınızı bekliyorum, Bir dahaki sefere kadar!Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave