sexta-feira, 12 de agosto de 2011

Maus cheiros nos códigos

sexta-feira, 12 de agosto de 2011
As vezes na ânsia de terminar e ver o programa funcionando, o programador acaba implementando as funcionalidades de forma descuidada e acaba por ter um código de baixa qualidade.

vejamos um exemplo:

public void baixarCliente(){
  boolean abertas = false;
  
  for (Fatura fatura : cliente.getFaturas()){
    if (fatura.getStatus().equals(Status.EM_ABERTO)){
      abertas = true; 
      break;
    }
  }

  if (abertas)
    throw new FaturasEmAbertoException();

  cliente.setBaixado(true);
  cliente.setDataBaixa(new Date());
  MailSender mail = new MailSender("Baixa.modelo");
  mail.send(cliente.getEmail());

}
Este Código por exemplo ao ler ele com cuidado podemos entender e ele faz o que é necessário.
Mas poderia ser simplificado para poder transmitir mais conhecimento. Vejam como ficaria refatorado.

public void baixarCliente(){
  
  if (clientePossuiFaturasEmAberto())
    throw new FaturasEmAbertoException();

  registraBaixaDoClienteEEnviaEmailParaOCliente();

}

private void registraBaixaDoClienteEEnviaEmailParaOCliente(){
  cliente.setBaixado(true);
  cliente.setDataBaixa(new Date());
  enviaEmailParaOClienteNotificandoABaixa();
}

private void enviaEmailParaOClienteNotificandoABaixa(){
  new MailSender("Baixa.modelo").send(cliente.getEmail());
}

private boolean clientePossuiFaturasEmAberto(){
  for (Fatura fatura : cliente.getFaturas())
    if (fatura.getStatus().equals(Status.EM_ABERTO))
      return true;

  return false;
}


Com um código como esse fica mais claro as operações que estão sendo executadas. Ao ler o código que faz a baixa do cliente:


if (clientePossuiFaturasEmAberto())
throw new FaturasEmAbertoException();

registraBaixaDoClienteEEnviaEmailParaOCliente();

fica claro as verificações que são feitas.

ao desenvolver pense em fazer isso, pois os benefícios serão vistos na manutenção do seu sistema.



Nenhum comentário :

Postar um comentário