Dependency Inversion Principle/Inversão de Dependência.

Princípio da inversão de dependência.

Este é o último padrão da sigla SOLID e a proposta deste padrão é que as classes dependam de abstrações.

Abstrações não devem depender dos detalhes, mas os detalhes devem depender da abstração.

Classes de alto nível não dependem das classes de baixo nível. O correto é que ambos dependam de abstrações.

Para exemplificar melhor este padrão, veremos o clássico exemplo da implementação do botão para acionar lâmpada.

<?php

class Botao {

    private $lampada;
    public function __construct(Lampada $lampada) {
      $this->lampada = $lampada;
    }

    public function Acionar() {
       if (!$this->lampada->ligado) {
             $this->lampada->ligar();
       }
    }
}

Esta implementação quebra o princípio de inversão de dependência, pois a classe Botão depende da classe lâmpada.

O Botão sabe os detalhes da implementação. Alterações na classe lâmpada também irão requerer alterações na classe Botão.

Faremos uma abstração e para melhorar esta implementação com  a inversão de dependência.

interface Dispositivio {
    
    public function ligar()

    public function desligar()

}

class Lampada implements Dispostivo {

    public function ligar() {
    }
    public function desligar() {
   }

}

class Botao {

    private $dispositivo;
    public function __construct(Dispositivo $dispositivo) {
        $this->dispositivo = $dispositivo;
    }

    public function Acionar() {

      if (!$this->dispostivio->ligado) {
            $this->dispositivo->ligar();
       }
    }
}

Este princípio nos leva a respeitar aos outros do SOLID, separar responsabilidade, segregar interfaces, implementação do OCP.

Cada um dos princípios de SOLID complementam-se e tornam o desenvolvimento do nosso código/software mais coeso, corrigível e com melhor qualidade.

 

Siga e compartilhe:
error

Deixe um comentário

Enter Captcha Here : *

Reload Image