PHP – Symfony Component’i ile Dependency Injection

Nesne yönelimli programlamada bazı nesneler birbiri ile bağlantılı olmak durumunda kalabiliyor. Ancak bu “bağlama” işlemleri için eğer doğru bir yazılım tasarımı yapılmazsa, kodun “maintain” (sürdürmek) edilebilmesi oldukça zorlaşır. Özellikle kodun maintain edilebilmesi için nesnelerin birbirlerine tightly coupled (sıkı bağlama) değil de loosely coupled (gevşek bağlama) olarak bağlanması gereklidir.

Birbiri ile bağlantılı nesnelerin yine birbirlerine “enjekte” edilebilmesi için arada bir framework olmalı (framework olmadan alternatif çözüm üretmek de mümkün). Aslında dependency injection kavramı tam bu kapıya çıkıyor. Nesnelerin bir framework aracılığıyla diğer nesnelere enjekte edilmesidir dependency injection.

PHP’de ise dependency injection için birçok framework var. Ancak bunların da birçoğu outdated (zaman aşımına uğramış).

Bu işler için Symfony‘nin kendi içinde bir dependency injection component’i bulunuyor.

Yazının devamında bulunan kodda, Symfony’nin dependency injection component’i ile yazdığım bir örneği görebilirsiniz.

Money sınıfı iCurrency interface’ine loosely coupled olarak bağlı. Böylece iCurrency‘den türetilen herhangi bir sınıfı kendi içerisinde çalıştırabilecek.
Ancak arada bir interface olmamış olsaydı, doğrudan Dollar sınıfına bağlansaydı, ileri de Euro para birimi kullanılacağı zaman bir de ekstra olarak Money sınıfının bağımlılığı düzenlenecekti.

İlgili kodu görmek için buraya tıklayın.

İlgili kodun PHPUnit ile yazdığım Unit Test’lerine buradan ulaşabilirsiniz.

 
19 Kudos
Don't move
  1. Çok yaygın kullanılan kelimelerin bile ingilizcesini yazınca yazı hiç anlaşılmaz olmuş. Component, maintain etmek, framework gibi kelimelerin karşılıklarını kullanmayınca ne okunuyor, ne de anlaşılıyor. Birim testi diyince ne güzel anlayacağız niye unit test yazıyorsun ki?

Yorum Yap


Not - Bunları KullanabilirsinizHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>