Welcome to Abdul Malik Ikhsan's Blog

Dependency Injection -:: The Introduction ::- something must be known before attempting to use zend framework 2.0

Posted in Teknologi, Tutorial PHP, Zend Framework by samsonasik on June 18, 2011

Dependency Injection terjadi ketika komponen software ( dalam hal ini, kelas ) dependensinya diberikan melalui konstruktor mereka, method, atau langsung ke fields. Secara sederhana, Dependency Injection adalah passing atau setting dependency ke dalam komponen software ( Dependency Injection Container ). Dengan kata lain, jika sebuah kelas tidak dapat melakukan pekerjaannya tanpa dependency, maka terjadilah dependency injection. Kelas yang diinject, tidak hanya dapat membangun object, tapi juga perilakunya.

Dependency injection dapat dilakukan melalui 3 hal, yaitu :

  1. Constructor Injection
  2. Setter Injection
  3. Interface Injection

Ok, mari kita bahas satu per-satu…
1. Constructor Injection
Injection terjadi pada saat pembentukan method constructor melalui passing parameter dalam konstruktor tersebut, seperti ditunjukkan pada kode program berikut :

class Antrian
{
    public function __construct(Orang $org)
    {
        this->orang = $org;
    }
}

2. Setter Injection
Injection terjadi pada saat menge-set attribut , seperti berikut :

class Antrian
{
    public function setOrang(Orang $org)
    {
        $this->orang = $org;
    }
}

3. Injection terjadi di interface , seperti berikut :

interface AntrianInjector {
    public function injectAntrian(Orang $orang);
}

Contoh implementasi Dependency Injection secara utuh sebagai berikut :

interface Hello
{
    public function greet($greeting);
}

class NormalHello implements Hello
{
    public function greet($greeting)
    {
        echo $greeting.' world ';
    }
}
class AlayHello implements Hello
{
    public function greet($greeting)
    {
        echo str_replace( 'e','3', $greeting).' world ';
    }
}

//di container ..
class Container
{
    public function __construct(Hello $hello, $color = null)
    {
        $this->hello = $hello;
        $this->color = $color;
    }
    public function out($in)
    {
        echo "<font color=\"{$this->color}\">";
            $this->hello->greet($in);
       echo "</font>";
    }
}

$alay = new AlayHello();
$container = new Container($alay,'#000FFF');
$container->out('Hello');

Sekian, semoga dapat membantu pemahaman tentang Dependency Injection, sebelum belajar Zend Framework 2.0 yang hadir dengan komponen Zend_Di yang nantinya akan sangat membantu dalam penggunaan teknik Dependency Injection ini.

Gambar :

Referensi :
http://martinfowler.com/articles/injection.html
http://en.wikipedia.org/wiki/Dependency_injection
http://www.slideshare.net/fabpot/symfony-and-zend-framework-together-2009
http://framework.zend.com/wiki/display/ZFDEV2/Proposal+for+ServiceLocator+and+DependencyInjector
http://picocontainer.org/injection.html
http://stackoverflow.com/questions/1503584/dependency-injection-through-constructors-or-property-setters

2 Responses

Subscribe to comments with RSS.

  1. […] , saya akan mencoba menggunakan class Validator-nya Zend Framework, pertama, kita buat dulu class Dependency Injection-nya seperti berikut […]

  2. […] Framework 2 menghadirkan komponen baru, yaitu Dependency Injection Container Component. Komponen ini berada pada package ZendDi yang nantinya akan jadi container […]


Leave a reply to Zend Framework 2 : Dependency Injection « Welcome to Abdul Malik Ikhsan's Blog Cancel reply