Fórum Onde implementar a lógica em um modelo MVC? #403017

14/06/2011

0

Olá pessoal, estou lendo sobre tudo que diz respeito a estrutura de uma aplicação(Spring, Struts,

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

Lilian

Responder

Posts

14/06/2011

Davi Costa

Vc vai fazer outra camada de serviços que fazem a ligação entre os controllers e sua camada de modelo.
É 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
Responder

Gostei + 0

14/06/2011

Lilian

Davi, nessa camada de serviço eu devo colocar todos os métodos e validações?

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

Responder

Gostei + 0

15/06/2011

Davi Costa

É por ai sim.
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
Responder

Gostei + 0

15/06/2011

Dyego Carmo

Resolvido ?

Se sim , poderia fechar ?

Valeu !
Responder

Gostei + 0

15/06/2011

Lilian

Só mais outra dúvida...

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?

 
Responder

Gostei + 0

15/06/2011

Lilian

Pensando bem...

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?


Responder

Gostei + 0

15/06/2011

Davi Costa

O GenericService e o GenericServiceImpl que falei, vão ser justamente esse DAO.
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
Responder

Gostei + 0

15/06/2011

Lilian

Blz com as explicações já consegui ter uma visão do que deve ser feito.

Obrigada pela ajuda
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar