Created
January 24, 2012 15:14
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
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
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.