Dependency Inversion و Inversion of Control در PHP

۲۰ خرداد ۱۳۹۷

طراحی سایت

Dependency Injection (تزریق وابستگیها)

ما با تزریق وابستگی شروع می کنیم؛ زیرا ما را در موضوعات دیگر هم هدایت می کند:

در مهندسی نرم افزار، تزریق وابستگی یک تکنیک است که در آن یک شی با وابستگی یک شی دیگر استفاده می شود.

به کد زیر توجه کنید:


<?php

class Superhero
{
    public $name;

    public function __construct(string $name)
    {
        $this->name = $name;
    }
}

class ComicBook
{
    public $mainCharacter;

    public function __construct(Superhero $superhero)
    {
        $this->mainCharacter = $superhero;
    }
}

$superhero = new Superhero('Caffeine Man');
$comic = new ComicBook($superhero);

تزریق وابستگی که در بالا می بینید شیء ComicBook ما بستگی به شیء Superhero ما دارد، بنابراین ما آن را تزریق می کنیم.

Dependency Inversion (معکوس سازی وابستگی)

اگر ما بخواهیم شخصیتهای مختلف داستان ها را نشان دهیم، می توانیم ابتدا یک اینترفیس از شخصیت درست کنیم و سپس از این اینترفیس، شخصیتهای مختلف مانند خون آشام، قهرمانها، سگ وحشی و ... بسازیم.


<?php

interface CharacterInterface
{
    /**
     * All classes implementing this interface must provide a getName method.
     */
    public function getName() : string;
}

abstract class Character implements CharacterInterface
{
    public $name;

    public function getName() : string
    {
        return $this->name;
    }
}

class Superhero extends Character
{
    public $name;

    public function __construct(string $name)
    {
        $this->name = $name;
    }
}

class VampiricDog extends Character
{
    public $name;

    public function __construct(string $name)
    {
        $this->name = $name;
    }
}

class ComicBook
{
    public $mainCharacter;

    public function __construct(CharacterInterface $character)
    {
        $this->mainCharacter = $character;
    }
}

$superhero = new Superhero('Caffeine Man');
$superheroComic = new ComicBook($superhero);

var_dump($superheroComic->mainCharacter->getName());

$vampireDog = new VampiricDog('Mr. Fangz');
$vampireComic = new ComicBook($vampireDog);

var_dump($vampireComic->mainCharacter->getName());

 نویسنده:حمید شاه محمدی
 تعداد مشاهده خبر:(484)
 هر روز از مقاله های جدید طراحی سایت در کانال تلگرام ما با خبر شوید

 میانگین امتیازات:
 
  تعداد رای دهندگان: {{ count }}
نظرات:

{{ x }}
{{ alert }}

نویسنده:{{ com.name }}
{{ com.body }}
{{ com.created_at }}