Na aula seis foi comentado sobre a responsabilidade única. Nele foi comentado sobre o Active Record e eu uso em meus projetos com a seguinte estrutura. 1) Eu tenho uma classe de conexão com o banco 2) eu tenho uma trait com o CRUD 3) Eu tenho uma classe abstrata que eu chamo de Model que assina o contrato com a Trait.
*No construtor eu preciso passar três paramêtros (a entidade, um array com os campos obrigatórios da minha entidade, e o paramêtro opcional primaryKey que vai setado por id ( porque uso como padrão)
No model eu tenho um query builder (alguns métodos que me permitem construir/ consumir as queryes.
E tenho um método chamado save. O Metodo save, chama um método required ( que verifica se os campos do array passado no construtor) estão preenchidos, caso não lança uma exception, caso contrário ele valida se existe a primaryKey e atualiza caso contrário ele faz um insert no banco. como mostra o código abaixo
public function save(): bool
{
$primary = $this->primary;
$id = null;
try {
if (!$this->required()) {
throw new Exception("Preencha os campos necessários");
}
/** Update */
if (!empty($this->data->$primary)) {
$id = $this->data->$primary;
$this->update($this->safe(), $this->primary . " = :id", "id={$id}");
}
/** Create */
if (empty($this->data->$primary)) {
$id = $this->create($this->safe());
}
if (!$id) {
return false;
}
$this->data = $this->findById($id)->data();
return true;
} catch (Exception $exception) {
$this->fail = $exception;
return false;
}
}
Você acredita que mesmo assim as classes que vão herdar o model terão mais de uma responsabilidade? se sim, tem alguma dica de como desacoplar mais esse código.