Vou dar um exemplo.
Considerando as entidades Pagamento
e Parcela
. Considere que estamos falando de pagamentos parcelados.
A entidade Pagamento
tem vários atributos. Mas para ser válida temos apenas 3:
- Descrição
- Valor do pagamento
- Vencimento
class Pagamento
{
private $descricao;
private $valorPagamento;
private $vencimento;
private $outro_atributo1
private $outro_atributo2
function __construct($descricao, $valorPagamento, $vencimento)
{
$this->descricao = $descricao;
$this->valorPagamento = $valorPagamento
$this->vencimento = $vencimento;
}
// outros métodos...
}
Até aqui blz. Entendido.
Só que vamos imaginar uma suposta consulta de uma lista de pagamentos. Nela não importa exibir o valor do pagamento nem o vencimento dele. Importa ter o valor da parcela e o vencimento dela, pois, como falamos, são pagamentos parcelados.
Para isso tenho o método pagamentosParcelados()
no repositório. Estou implementando aquele processo de hidratação.
// este método está no repositório Pagamento
public function pagamentosParcelados()
{
$sql = "MINHA SQL" // nesta sql só interessa a descrição do pagamento. O resto dos dados referem-se às parcelas.
$stmt = $this->conexao->query($sql)
$pagtosParceladosDados = $stmt->fetchAll();
// hidratação
$listaPagtosParcelados = [];
foreach ($pagtosParceladosDados as $pagto) {
$listaPagtosParcelados = new Pagamento (...) // ---> aqui está a dúvida.
}
// restante do código...
}
Aqui está a dúvida: Se a entidade Pagamento
requer alguns atributos no construtor que, neste caso, não serão usados, mesmo assim preciso definí-los.
Fiquei confuso pois:
- Se criando um pagamento, estes atributos são obrigatórios. Aí tudo bem. Preciso destes métodos, senão o objeto fica em um estado inválido.
- Mas se estou fazendo esta consulta aí, só vou usar o atributo da descrição do pagamento. Os outros dois não serão imporantes para a consulta.
Quer dizer então que, neste caso, sou obrigado a instanciar o objeto com dois atributos que não vou utilizar na minha consulta, só porque preciso que eles estejam no construtor?