Existe alguma regra de boas maneiras que indique qual deva ser a melhor opção? Por exemplo, tenho um método que preenche um dos atributos da entidade Pessoa, poderia ser dessas duas formas:
public void preencherNome(Pessoa pessoa) {
pessoa.setNome(regra);
}
ou
public Pessoa preencherNome(Pessoa pessoa) {
pessoa.setNome(regra);
return pessoa;
}
Qual deveria utilizar? A que retorna o mesmo objeto já preenchido, ou a que preenche o objeto em memória?
As duas preenchem o objeto passado por parâmetro.
Mas uma não retorna nada e a outra retorna o próprio parâmetro.
Utilize aquela que melhor atender sua necessidade.
Nesse caso eu daria preferência a versão com void.
Retornando o objeto pessoa você pode gerar dúvidas para o chamador dessa função. Qual seria a forma de usar isso? A pessoa retornada é sempre a mesma pessoa passada como parâmetro?
O certo é usar a pessoa retornada pelo método ou usar a mesma pessoa passada para função?
Com sua implementação, tanto faz, mas isso gera uma dúvida desnecessária a quem usa seu código.
Esse estilo é geralmente usado quando você faz encadeamento de método, mas nesses casos você não passa o próprio objeto da cadeia por parâmetro.
Ótima colocação!
Eu por exemplo tenho o hábito de fazer meus setters retornarem a instância da própria classe, para fazer chamadas encadeadas ao inicializar objetos.
Isso quando eu não crio um builder… Mas cada caso, é um caso.
Não estou com esse problema, apenas surgiu a dúvida, por isso fiz esse exemplo tão simples e feinho, mas acredito que um exemplo melhor seria da seguinte forma:
Existe uma entidade chamada Estudo, onde temos várias informações, incluindo uma lista de valores para esse estudo.
Em determinado momento na camada de negócios precisamos fazer o cálculo desses valores, onde teremos várias situações a ser analisadas.
Nesse caso, qual seria o melhor uso, retornar o estudo com a lista de valores já calculados, ou carregar no objeto a lista de valores?