Pesquisar

terça-feira, 27 de janeiro de 2009

Regras de negócio OO vs Condicionais

O que é uma regra de negócio ?
São todas as regras existentes num sistema de informação, que ditam seu comportamento, suas restrições e validações. ( Wikipédia )

Imaginemos um sistema de cadastro de usuários (com regras bem pobres, mas que já são o bastante pra exemplificar a construção de regras no software) um conjunto válido de regras poderia ser:

1 - Só se pode cadastrar usuário que tem o nome de usuário com mais de 6 letras.
2 - As senhas deverão ter no mínimo 6 letras e no máximo 8 letras.
3 - Só será possível logar no sistema aqueles usuários que informarem a data de nascimento deles.

Condicionais

Numa abordagem condicional poderiamos ter.

if (! facade.cadastrar(usuario)){
showMessage("Erro ao cadastrar");
}

public boolean cadastrar(Usuario usr){
if (usr.nomeUsuario.length()<=6){
return false;
}
if (usr.senha.length()<6>8){
return false;
}
return true;
}

Mais oo

As regras estariam (ou deveriam) no próprio objeto e ele deveria reger todas as chamadas à ele.

public void setNomeUsuario(String user){
if (user.length() <=6) throw new NomeUsuarioInvalidoException("O nome deve conter no mínimo 7 letras.");
}
O simples fato de dar comportamente a quem interessa tal comportamente (GRASP) já é um avanço nos projetos de software. A maioria dos desenvolvedores ficam encantados com Spring ou mesmo discutindo qual melhor uso dos Daos ou Repositorios mas quase todos se esquecem que um bom projeto é o simples fato de entender e modelar os problemas da maneira mais adequada ao seu contexto. (seja oo, xx , ss ou yy)

* Tente sempre que possível codificar suas regras de negócio nos objetos (entidades).
* Não dito que usar if's é errado mas que pode ser um "cheiro" de que algo está errado ou caminhando pra rumo errado.
* O título ficou meio idiota no fim programas são sempre "condições" todavia não uma enxurada de condições encuraladas.

Nenhum comentário: