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

Advertisements

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

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: