como diminuir condição IF ELSE em codigo OO?  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
JotaJota
Java Ninja
[Avatar]

Membro desde: 11/05/2007 03:36:11
Mensagens: 256
Localização: Araraquara
Offline

Eu tenho uma classe que tem muitos atributos, nem todos eles como obrigatório.
Dependendo do que eu cadastrar, dos atributos que eu inserir dados, ele vai salvar com uma situação que é de preenchimento automatico
eu tenho 5 tipos de situações para este meu objeto
Minha regra de negocio fala que por exemplo:

se campos A,B,C,D estiverem preenchidos &&
se campo C < 100 &&
campo D não estiverem preenchidos
Então situação = situação 1



se campo A,B,C estiverem preenchidos &&
se campo C < 100 &&
campo C,D não estiverem preenchidos
Então situação = situação 2

E assim por diante...

Eu tenho essa regra que verifica os campos preenchido e se atender algumas validações ele seta uma situação(status) apropriada.
Em uma classe especifica para Negocio do caso de uso eu poderia simplemente criar um monte de IFs para resolver este problema.

Eu gostaria de diminuir esse monte de IF, porque if com OO fica feio.
Eu queria aplicar mais o OO


PS: Tentei aplicar o Padrão de Projeto state, porem ele foi descardado pelo fato de, que este padrão parte do pressuposto de que quando alterado uma situação, ele executa um comando especifico para aquela situação

no meu caso eu tenho que apenas validar meus campos se estão preenchidos ou não e setar essa situação automaticamente.
Alguem tem alguma ideia de como resolver este problema, este excesso de if?
alguem tem algum padrão que auxilia nessa regra?


Atenciosamente

[Email]
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

Coloque cada um desses blocos no seu próprio método com nome bem explicado.

Strategy é outro padrão que você pode ver.

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
JotaJota
Java Ninja
[Avatar]

Membro desde: 11/05/2007 03:36:11
Mensagens: 256
Localização: Araraquara
Offline

Coloque cada um desses blocos no seu próprio método com nome bem explicado.

Strategy é outro padrão que você pode ver


por exemplo:
verificaSituacao1(){
//verifica campos....

}

assim?
Ps: vou ver strategy. Obrigado
[Email]
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

Verificar é um verbo muito ruim, faça um pergunta cuja resposta é Sim ou Não e coloque esta pergunta inteira como o nome do método.

O objetivo é deixar a leitura do código o mais fluente possível.

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

vc pode usar Enums.... com os tests... eu acho uma solução bem legal ^^


Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

Lavieri wrote:vc pode usar Enums.... com os tests... eu acho uma solução bem legal ^^


Testes tudo bem, mas não entendi os enums

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
JotaJota
Java Ninja
[Avatar]

Membro desde: 11/05/2007 03:36:11
Mensagens: 256
Localização: Araraquara
Offline

Nunca usei enuns...
tem link?

//metodo que responde se um campo foi preenchido ou não
iscampoAPreenchido();
isCampoBPreenchido();

entendi...
poderei reutilizar o metodo varias vezes XD
vlwwww!!!
[Email]
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

assim por exemplo...



ai um exemplo de uso do teste



assim eu guardo os teste em um Enum, e posso sair testando todos, podia ali ao constatar que stillValid = false, lançar um Throws com o ValidadeCnpj.CONSTATE adequado...

acho uma forma facil de testar

Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
JotaJota
Java Ninja
[Avatar]

Membro desde: 11/05/2007 03:36:11
Mensagens: 256
Localização: Araraquara
Offline

vlwwwwww
[Email]
ambuzr
JavaChild
[Avatar]

Membro desde: 03/06/2008 16:53:41
Mensagens: 106
Offline

massa oh sabia nao vlw tb

java & linux, apanhando mais aprendendo

---------------------------------------------------
Quando rebaixas alguem, automaticamente voce se curva para rebaixar portanto voce tambem es rebaixado, porem quando levantas alguem automaticamente voce tambem es levantado
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team