Injeção de Dependências (Dependecy Injection) no PHP 7

Injeção de Dependências é semelhante a montar peças de lego.

E ai pessoal, vocês sabem o conceito de Injeção de Dependências no PHP ?

Então continua lendo que eu vou te explicar.

O que é Dependecy Injection?

Dependecy Injection é um padrão de design que permite a remoção de dependencias (módulos, plugin, classes) e torna possível altera-lás seja em tempo de execução (run-time) ou tempo de compilação (compile-time)

A citação acima faz o conceito de Dependecy Injection parecer mais complicado, no entanto isso não é verdade, portanto fique bem atento e ponha em prática o que aprender aqui pois com toda a certeza do mundo entenderá este conceito facilmente.

As implicações caso você não implemente maneiras eficientes de injetar dependências nos seus códigos são severas e podemos citar alto acoplamento, dificuldade de testar suas classes. Manter seu sistema vai ficar tão difícil que como resultado poderá te levar a loucura, literalmente.

Injeção de Dependência providencia a um componente suas dependencias através do seu construtor, chamada de métodos ou inserindo em uma propriedade/atributo.

Nós demostramos o conceito de forma bem simples usando uma classe Database onde através do seu método construtor inserimos um DatabaseAdapter para que a classe Database possa usa-lá.

Vejam um ponto muito importante onde inserimos pelo método construtor da classe Database não uma classe concreta MysqlAdapter ou PostgresAdapter mas sim um interface, ou seja, uma abstração.

Em resumo nossa classe Database injeta uma interface DatabaseAdapter usando o seu método construtor. Isso nos permite baixo acoplamente, fácil manutenção deste código e facilidade na testabilidade desta classe Database uma vez que poderemos injetar suas dependencias de qualquer lugar que venhamos a usa-lá.

interface DatabaseAdapter {
	public function getTables();
}

class MysqlAdapter implements DatabaseAdapter {
	public function getTables() {
		return 'SHOW TABLES';
	}
}

class PostgresAdapter implements DatabaseAdapter {
	public function getTables() {
		return 'LIST TABLES';
	}
}

class Database {
	private $adapter;

	function __construct(DatabaseAdapter $adapter) {
		$this->adapter = $adapter;
	}
}

$adapter = new PostgresAdapter();

$database = new Database($adapter);

Podemos concluir que Injeção de Dependências em qualquer aplicação web é um fator significativo para as futuras manutenções do seus sistemas, por tanto use esse conceito de pattern com muita atenção, carinho e cuidado. Seus clientes no futuro irão te agradecer.

Referência: https://www.phptherightway.com/#dependency_injection

Julio Alves
administrator
Julio Alves é desenvolvedor web com mais de 8 anos de experiência, amante de PHP, Javascript, NodeJS, Ionic e ReactNative. Graduado em Sistemas de Informação pela Faculdade Estácio FIC do Ceará. Acredita que para se tornar um bom programador é preciso sobretudo ser esforçado e aberto para aprender todos os dias.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Lançamento Novo Curso de PHP 7
Lançamento Novo Curso de PHP 7