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
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 interface
s 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 interface
s 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.