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 )
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…
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);
}
}
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()…
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.
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…