
Biraz karışık anlattım sanırım şöyle örnekleyeyim
İlk önce bağımlılık Enjeksiyonunu kavramak önemli diye düşünüyorum. Sizin açtığınız konu ve kendimi tam anlatamadığımı düşündüğüm cevabım sonrasında Design Patterns konusuna eğildim.
Bende algılamaya çalışıyorum bir yandan bunuda belirteyim. Oluşabilecek saçma cümlelerime tahammülünüz için şimdiden teşekkür ederim.
Bağımlılık enjeksiyonu yaklaşım olarak sınıflarımızın mümkün olduğu kadar bir birine "az" mümkünse hiç bağlı kalmadan çalışabilmesi. Bu çerçevede soyut sınıflar kullanarak yapıları oluşturup alternatif senaryolara geçiş aşamasında yazdığımız yapıyı bozmadan devam etme olanağı sağlıyor.
Çok basit olarak verilen stringin karakter sayısını döndüren bir yapı istensin.
bu basit işlem için alternatif istek noktaları olması muhtemeldir. veritabanı, dosya , form v.s.
Bu talebi değerlendirip arayüzler ve sınıflarla işlemi gerçekleştirebilir olduk.
App::bind("saybakalim" , function(){
new Saydir();
})
kodu
App::make("saybakalim");
çağrıldığında yapılacak işlemi belirliyor.
Burda bağlılıklar düzenlenebiir. Sizin verdiğiniz örnekte
App::bind('FooInterface',function() {
return new FooClass;
});
FooInterface kullanmanız o interfaceyi çağıracağı anlamını taşımıyor oraya yazdığınız bir tanımlama yani patates te yazabilirsiniz.
siz App::make("patates"); dediğinizde de aynı işlemi yapacaktır.
Buraya kadar kullanımı anlamaya çalıştım.
Şimdi neden kullanalım.
App::bind('DbdenSay',function() {
});
diye bir koda başlayıp. bir biri ile "bağımlılığı" bulunmayan sınıfları bağlayarak istediğimiz işlemi yapabiliriz.
Yemek yemeyi seven birisi olarak şöyle örnekleyeyim.
Melemen yapacağız
Soğan , Domates , yumurta , biber bir birine bağımlılığı olmayan sınıflarımız.
App::bind("melemenYap", function(){
$sogan = new Sogan();
$sogan->getAdet(2);
$sogan-->soy();
$sogan->dogra();
.............................
}
dedikten sonra (..... ları anlayacağınızı umuyorum.
Canımız çektiğinde
App::Make("melemen");
diyerek "Bağımlı olmayan" elemanlarımızdan tek komutla melemeni yaparız.
Afiyet Olsun :)))