Fórum Onde implementar a lógica em um modelo MVC? #403017
14/06/2011
0
Facade) para descobrir onde colocar a lógica do sistema, mas não consigo chegar a uma conclusão nessa
parte.
Como não acho que seja correto colocar uma função de cálculo, por exemplo, em um Managed Bean, eu
gostaria de saber como ficaria em um caso como este:
//Bean
public class Calculo{
private Integer val1;
private Integer val2;
//gets, sets, equals, hashcode, toString
}
//ManagedBean
public class CalculoFace{
Calculo selectedCalculo;
CalculoFace(){
selectedCalculo = new Calculo();
}
public Calculo getSelectedcalculo(){ return this.selectedCalculo;}
public void setSelectedcalculo ( Calculo selectedcalculo){
this.selectedCalculo = selectedcalculo;
}
public Integer calculaOperacao()
{
return selectedCalculo.getVal1() + this.selectedCalculo.getVal2(); // Essa operação deve ficar
onde?
}
}
//Calculo.jsp
<h:commandButton action="#{CalculoFace.calculaOperacao}" value = "Calcular"/>
Esse método "calculaOperacao" deve ficar no ManagedBean mesmo ou devo criar outra classe, instanciar um
objeto dessa no MBean e chamar o método. Essa classe de métodos seria a de Business objects, poderia
chamada de CalculoBO?
Gostaria de me aprfundar no assunto então sobre o que devo estudar?
Além da dica de estudo, por favor me digam onde ficam os métodos, só para matar a curiosidade :D
Obrigada.
Lilian
Curtir tópico
+ 0Posts
14/06/2011
Davi Costa
É interessante que cada entidade (classe) do seu modelo tenha sua respectiva classe de modelo.
Os controolers só pegam os dados digitados pelo usuário na camada visual e passam a responsabilidade para a camada de serviço.
A camada de serviço contém as regras de negócio e devolve uma resposta para o controller que posta a resposta na tela (camada visual)
att Davi
Gostei + 0
14/06/2011
Lilian
Isso que vc está dizendo seria Façade?
Ficaria assim?
//ManagedBean
public class CalculoFace{
Calculo selectedCalculo;
CalculoBO calculoBO;
CalculoFace(){
selectedCalculo = new Calculo();
}
public Calculo getSelectedcalculo(){ return this.selectedCalculo;}
public void setSelectedcalculo ( Calculo selectedcalculo){
this.selectedCalculo = selectedcalculo;
}
public Integer calculaOperacao()
{
return calculoBO (selectedCalculo.getVal1() , this.selectedCalculo.getVal2()) // Fica assim mesmo?
}
}
//CalculoBO.java
public class CalculaBO{
public Integer calculaOperacao(int val1, nt val2)
{
return val1 + val2;
}
Posso usar esse BO(Business Object) no final do nome da classe? Se aplica a esse caso?
Obrigada
Gostei + 0
15/06/2011
Davi Costa
Num futuro próximo vc pode evoluir ainda mais código. Ao invés de Um CalculoBO, vc pode criar uma interface CalculoService e sua implementação CalculoServiceImpl (padrão de projeto programa para interfaces - pesquise sobre suas vantagens).
Depois um dia vc vai ter uma interface genérica GenericService onde todos as suas interfaces vão estender dela e nela vai conter os métodos comuns a todos os services como o nosso tradicional CRUD, as 4 tradicionais operações do banco de dados.
Ai pode ter serviço que nem tenha métodos implementados se não houver necessidade de mais métodos além dessas 4 operações. Já para os Impl's que é onde ficaria as implementações, vc pode implementar um GenericServiceImpl que já traz a implementação desses métodos comuns a todos que necessitam de implementação que veio de GenericService (lembra que citei que todos os serviços estendem dessa interface). Desse modo vc vai ter um excelente reuso de código.
Aqui nos posts da devmedia e na JavaMagazine existem vários exemplos de código que utilizam essa arquitetura.
Inclusive aqui no fórum não é a primeira vez que falo sobre esse assunto.
Bons estudos e sucesso
att Davi
Gostei + 0
15/06/2011
Dyego Carmo
Se sim , poderia fechar ?
Valeu !
Gostei + 0
15/06/2011
Lilian
Davi, agora deu para entender legal, então vou pensar na criação das interfaces service e serviceimpl como proposta de melhoria futura, já que a empresa está apertando para a entrega do sistema.
Sei q da forma como mostrei a implementação não seria um pattern Facade por completo, mas gostaria de saber se quando eu for apresentar o sistema, fazendo do mesmo jeito, eu poderei dizer que apliquei o pattern Facade? Ou devo dizer que usei Facade em partes ou nem dizer pq estaria cometendo um grande erro?
Gostei + 0
15/06/2011
Lilian
Acho que eu poderia colocar métodos que utilizem somente a classe de Bean no próprio Bean(entendo como entidade) e métodos que envolvam acesso a várias classes (DAO, relatórios...) e crio um Facade.
Estou chegando perto?
Gostei + 0
15/06/2011
Davi Costa
Tendo pelo menos o CRUD completo neles.
Daí vc pode criar um Facade, da forma que falei antes vc não estaria criando bem um Facade, mas só MVC mesmo.
Apesar deque não seria errado dizer que estava usando um Facade não, mas Facade é um pouco mais que isso.
att Davi
Gostei + 0
15/06/2011
Lilian
Obrigada pela ajuda
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)