Skip to content

Instantly share code, notes, and snippets.

@rponte
Created January 24, 2012 15:14
Show Gist options
  • Save rponte/1670630 to your computer and use it in GitHub Desktop.
Save rponte/1670630 to your computer and use it in GitHub Desktop.
Classe Java exemplificando uso de método privado para melhorar legibilidade do código
public class LimiteDeSaldo {
private BigDecimal disponivel;
private BigDecimal concedido;
private BigDecimal margemDeCredito;
public LimiteDeSaldo(BigDecimal disponivel, BigDecimal concedido, BigDecimal margemDeCredito) {
this.disponivel = disponivel;
this.concedido = concedido;
this.margemDeCredito = margemDeCredito.setScale(2, RoundingMode.HALF_DOWN);
}
public void debita(BigDecimal valorASerDebitado) {
if (!possuiDisponivel(valorASerDebitado))
throw new LimiteDeSaldoDisponivelInsuficienteException(disponivel);
disponivel = disponivel.subtract(valorASerDebitado);
}
public void debitaSemConsultaDeLimite(BigDecimal valorASerDebitado) {
disponivel = disponivel.subtract(valorASerDebitado);
}
private boolean possuiDisponivel(BigDecimal valor) {
return getDisponivelComMargemDeCredito().compareTo(valor) >= 0;
}
private BigDecimal getDisponivelComMargemDeCredito() {
return calculaDisponivelComMargemDeCredito();
}
private BigDecimal calculaDisponivelComMargemDeCredito() {
BigDecimal margem = disponivel.multiply(margemDeCredito);
return disponivel.add(margem).setScale(2, RoundingMode.UP);
}
}
@cmilfont
Copy link

Sinceramente, o metodo getDisponivelComMargemDeCredito provoca somente mais ruído e não causa melhor legibilidade.

Não vejo ganho algum em chamar getDisponivelComMargemDeCredito ou inves de calculaDisponivelComMargemDeCredito diretamente.

Observe como o método possuiDisponivel é forte candidato a se tonar um objeto e granularizar essa classe.
EU transformaria num SaldoDisponivel com o método publico comMargemDeCredito com alguns arranjos simples.

Continuo repetindo, não há necessidade de contexto private.

@hvitorino
Copy link

Ainda acho que há necessidade de contextos private. Não nesse código, mas há.
Também não vi a necessidade de se criar uma classe como você sugeriu.
Melhorei a legibilidade fazendo um fork => https://gist.github.com/1670921

PS.: não era pra mim, mas não resisti. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment