Frame MVC + DDD + Muitas Duvidas

Boa noite Grande Galera…

Bom to com um monte de Duvidas… Tava estás ultimas semanas lendo sobre DDD… Bom Aprendi muito coisa e vi que eu fazia varias besteiras no meus Programas… Mas fazer o que a vida é assim mesmo vivendo e aprendendo…

Agora as Duvidas…

Uso como Frame MVC o Mentawai e queria montar uma arquitetura para o meu programa bem legal

Tenho um Bean Pessoa

Tenho o Controller do Menta

Tenho a minha Action que extende a BaseAction do Menta

Ai tenho a Interface GenericDao e minha Classe HibernateGenericDao que Implementa GenericDao

Ai na minha Action tenho o Seguinte


public class Pessoa() extends BaseAction{

    private PessoaHibernateDao= pessoaDao;

     public String add() throws Exception{
        Pessoa pessoa = (Pessoa) input.getValue("pessoa");
        pessoaDao.save(pessoa);
        return SUCCESS;
     }

}

A Minha duvida é ali no meio do método add() se eu tivesse alguma verificação ou calculo a fazer antes de inserir no BD eu deveria fazer numa classe que trataria das regras de negócio certo?

E para salvar no BD ele deveria ser salvo ali na Action mesmo dai ou em outro lugar(Classe de regra de negócio ou Repositorio ou sei la o que :blush: )

Se não for na Action alguém que saiba sobre o menta poderia me dizer qual a melhor maneira de fazer pois só consigo fazer Injetar o Dao ali na Action e se eu tiver que usar ele numa regra de negócio como que eu poderia passar ele no construtor da regra ou aonde?

Nossa acho que fiz uma salada do caramba ai mas se alguém puder me ajudar ficarei muito grato…

Desde já muito obrigado a todos…

Frameworks têm , por definição , algum conjunto de classes que deve se estendida para prover a funcionalidade real. No seu caso são os Actions. Ora, pense por um momento que vc tem que testar o seu sistema. Pense que o codigo que está no seu action tem que ser chamado de dentro de um teste. Se o seu codigo tem mais de 10 linhas provavelemente replicar o codigo no action e no teste não é a melhor opção. Logo por desenho vc cria uma classe que seja a fronteira do seu sistema de forma que tanto o action quanto o teste possa trabalhar com a mesma classe. Quando a classe de fronteira for testada pelo teste, então isso implica que o processo web está testado ( supoe-se que o framework não tem bugs e exclusem-se problemas de infra com falha de sokets etc).

Estas classe de fronteira são chamadas Serviços.
Portanto o seu codigo ficaria assim


public class PessoaServico {

   private PessoaHibernateDao= pessoaDao;

   public void adicionaNovaPessoa(Pessoa p){
      // faz outras operações se necessário. Por exemplo, 
       // envia um email com a senha gerada aleatoriamente
      pessoaDao.save(pessoa);
  }

}

public class PessoaAction extends BaseAction{

     PessoaServico  servico = new PessoaServico ()

     public String add() throws Exception{

         // processo de tradução
        Pessoa pessoa = (Pessoa) input.getValue("pessoa");

        try {
         // aciona serviço
        servico.adicionaNovaPessoa(pessoa);

        return SUCCESS;
       } catch (ServiceException e){
          
        return FAILURE; // não sei se é este o nome 
       }

     }

}


public class PessoaTeste {

     @Test
     public String testAdicionaNovaPessoa() {
      PessoaServico  servico = new PessoaServico ()

         // processo de tradução
        Pessoa pessoa = new Pessoa();
        pessoa.setNome("Nome de Teste");

         // aciona serviço
        servico.adicionaNovaPessoa(pessoa);

     }

}

Muito Obrigado Sergio… Entendi perfeitamente…

Porém agora me surge outra duvida… (axo que so burro mesmo)

É o seguinte eu consigo injetar dentro da minha action o DAO mas e para passar para o Serviço eu passo através do construtor mesmo ou atraves de um método setDao()…

Desculpem a ignorançia…

Você pode injetar o Dao direto no Serviço. Você usa o ioc do mentawai. Agora vai passar a usar o di…

Hum Agora entendi…

Qualquer coisa eu posto aqui novamente

Muito Obrigado pelas dicas…

Só lembrando Fabiano.

Não existe uma receita de bolo de como utilizar DDD. Claro que você deve entender seus principios, o que é infra-estrutura, o que é o negócio, o que são serviços, o que são repositórios e etc, porém não existe um “faça desse jeito aqui e tudo ficará lindo”.

DDD é muito legal, mas só com o tempo e com a prática é que você vai melhorando seus designs.

[quote=ManchesteR]Só lembrando Fabiano.

Não existe uma receita de bolo de como utilizar DDD. Claro que você deve entender seus principios, o que é infra-estrutura, o que é o negócio, o que são serviços, o que são repositórios e etc, porém não existe um “faça desse jeito aqui e tudo ficará lindo”.

DDD é muito legal, mas só com o tempo e com a prática é que você vai melhorando seus designs. [/quote]

QUanto a isto ja estou ciente…

Erão só algumas duvidas que tenho hoje… Mas depois disso esclarecido consegui compreender muito mais coisas lendo sobre DDD…

Muito Obrigado pela atenção de todos