Onde implementar a lógica em um modelo MVC?

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 :smiley:

Obrigada.

Da uma olhada em padrões de projetos, eu gosto de usar o DTO, VO, como quiser.

EU faria assim:

class Calculo(){

public Integer calculaOperacao(Integer val1,Integer val2){

return val1+val2;
}

ManagedBean:

class CalculoFace{
Calculo calculo;

Integer calculaOperacao(){
return calculo.calculaOperacao(calculo.getVal1,calculo.getVal2())
}
}

A Lógica fica sempre na camada de modelo da sua aplicação.

Da forma mostrada, colocando a lógica no próprio bean não se estaria usando nenhum pattern, é isso?

Ouvi falar muito bem de Facade, eu gostaria de usar, então como ficaria com ele? A lógica fica fora do Bean? Mas fica aonde?

Assim seria com Façade? Se não o que é? :slight_smile: É algum padrão? Preciso saber para poder estudar mais sobre o asssunto pq acho bom trabalhar com essa estrutura.

//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? O BO se aplica mesmo a esse caso?

obs.: desculpa pelo monte de perguntas mas se eu não resolver essa pequenas dúvidas eu fico empacada :slight_smile:

Obrigada de novo.