Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre conceito (abstração e implementação)

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
1 resposta
solução!

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.