Como poderíamos explicar de forma simples e com exemplo o conceito:
- Depender sempre de abstrações, e não de implementações específicas
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Como poderíamos explicar de forma simples e com exemplo o conceito:
Fala, Júnior!
No curso de SOLID isso é tratado com mais detalhes, principalmente no princípio de inversão de dependência.
Mas basicamente, nós devemos depender DO QUE determinada classe faz, e não DE COMO essa classe faz.
A forma mais simples de realizar isso é dependendo de interfaces ao invés de classes concretas, mas não é regra.
Ex.:
class ClasseQuePossuiDependencia
{
private RepositorioQualquer $repositorio;
public function __construct(RepositorioQualquer $repositorio)
{
$this->repositorio = $repositorio;
}
public function tarefaDaClasse()
{
// realiza tarefa da classe
$this->repositorio->conectaNoBanco();
$this->repositorio->preparaQuery();
$this->repositorio->insereDadoQualquer($dadoQualquer);
}
}
Nesse exemplo conceitual, nós estamos dependendo de uma implementação muito concreta. Nós precisamos remodelar para depender apenas da interface:
class ClasseQuePossuiDependencia
{
private RepositorioQualquer $repositorio;
public function __construct(RepositorioQualquer $repositorio)
{
$this->repositorio = $repositorio;
}
public function tarefaDaClasse()
{
// realiza tarefa da classe
$this->repositorio->adiciona($dadoQualquer);
}
}
Se para realizar a tarefa o repositório precisa ou não se conectar a um banco, preparar query, etc, nós não precisamos saber. Nós só dependemos da funcionalidade de adicionar um dado qualquer, independentemente de como ela é implementada.
:-)
Por isso utilizar interfaces nos ajudam a atingir esse objetivo. Interfaces não possuem implementação. Uma interface no PHP só define o que as implementações devem fazer, e não como.