Vamos imaginar um cenário onde eu tenho um controlador que chama no repositório de alunos um método chamado buscarAlunoPorCpf(): Aluno
Nesse caso, esse repositório irá retornar um Aluno da entidade. Até ai ok.
Meu problema é o seguinte: Nesse objeto Aluno eu não poderei acessar suas propriedades privadas, como por exemplo: $aluno->nome
Somente é possível eu ter acesso ao nome através de um Getter, como por exemplo: $aluno->getNome();
Minha dúvida é: Onde eu devo fazer esse mapeamento de dados? Em uma camada de DTO, um UseCase?
Por que em um controlador que eu pego uma entidade pequena, com poucos atributos, é mole fazer o mapeamento.
Mas em um cenário onde uma mesma entidade Aluno tem 50 atributos diferentes, eu preciso de um local para fazer isso.
Exemplo de código com muitos atributos para serem mapeados (veja como fica extenso):
Class ControllerAluno {
public function buscarAlunoPorCpf($cpf){
$alunoRepository = new AlunoRepository();
$aluno = $alunoRepository->buscarAlunoPorCpf($cpf);
//Para eu acessar o nome desse aluno, eu teria que fazer o seguinte:
$arrayAluno = [
"nome" => $aluno->getNome(),
"sobrenome" => $aluno->getNome(),
"cpf" => $aluno->getNome(),
"mae" => $aluno->getNome(),
"pai" => $aluno->getNome(),
"avo" => $aluno->getNome(),
"papagaio" => $aluno->getNome(),
"cachorro" => $aluno->getNome(),
"corPreferida" => $aluno->getNome(),
"rg" => $aluno->getNome(),
"esporteFavorito" => $aluno->getNome(),
"status" => $aluno->getNome(),
"matricula" => $aluno->getNome(),
"pais" => $aluno->getNome(),
"cidade" => $aluno->getNome(),
];
return json_encode($arrayAluno);
}
}