Pergunta

Se uma classe tiver muitos parâmetros no construtor, podemos usar uma estrutura ou um padrão do construtor.

Qual é melhor? Existe alguma boa prática?

Foi útil?

Solução

Use uma classe com estrutura que atenda à sua necessidade. Martin Fowler tem uma técnica semelhante chamada DataTransferObject (DTO), no qual você passa um modelo de objeto em vez de recuperar os dados usando várias chamadas (chamadas de banco de dados persumivelmente), reduzindo o custo.

O padrão de benefício do construtor:

  1. A estrutura da classe não tem lógica adicional, significa que é mais fácil de ler (menos lógica)
  2. Não crie construtor fazendo obras reais O cheiro de código, novamente facilita a leitura do código
  3. A operação é barata, pois você apenas passava as referências e não cria um novo objeto. Especialmente quando a estrutura de dados é grande.

A desvantagem: o objeto está em estado mutável.

Outras dicas

Dependeria de quais eram os parâmetros e de sua relação entre si e quantos são necessários versus opcionais.

Se vários parâmetros estiverem relacionados, geralmente é melhor criar uma classe (ou estrutura) separada para armazenar esses parâmetros.

Por exemplo, em vez de

TransferMoney(long srcAccountNumber, int srcAmount, Currency srcCurrency, long destAccountNumber)

Podemos ver que o SRC Ammount e o SRCCurrency estão relacionados e podemos criar uma nova classe para lidar com dinheiro de várias quantidades (e possivelmente adicionar métodos para converter a outras moedas etc.) e reduzir o número de parâmetros:

TransferMoney(long srcAccountNumber, Money amount, long destAccountNumber)

Essa pergunta é agnóstica do idioma, mas se você tivesse um idioma que não suporta valores padrão (como Java), talvez seja necessário ter vários métodos sobrecarregados com diferentes números e tipos de parâmetros para se ajustarem a todas as combinações possíveis. Se houver muitas combinações, um construtor é um caminho mais limpo a percorrer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top