[quote=pcalcado][quote=Thiago Senna]
Bom…
Mas onde ficam minhas chamadas ao DAO? Dentro dos POJOS??
[/quote]
Você precisa de DAO para testar regra de negócio? Está construindo o que, um driver JDBC?
Chamadas ao DAO geralmente ficam em camadas de aplicação.[/quote]
Eis que se começa mais uma aula onde me encontro completamente perdido! :mrgreen:
Concordo com você Philip! Não é necessário usar DAO para testar a camada de negócio… concordo plenamente… e é assim que deve ser, em minha opinião!
Até onde sei, o Command tem o método execute, e neste método execute o pessoal costuma fazer isso, por exemplo:
public void execute(String ident) {
AlunoDAO dao = new AlunoDAO(); // 1
Aluno a = dao.load(ident); // retorna um aluno
double media = a.calculaMedia();
System.out.println(media);
}
O exemplo acima é escrotinho, mas da para discutir em cima dele rsrs…
Por exemplo, para testar o método calculaMedia da classe Aluno eu não dependo do DAO. Até aqui tudo bém.
Mas suponde que tenho dois clientes, um swing e outro web! Se houver uma operação chamada calcula média, basta chamar este command e passar a identificação do aluno por parâmetro! Então, de uma maneira ou de outra, acho que é possível reaproveitar este command para diferentes clientes… mas é claro, depende muito da arquitetura das duas aplicações…
Mas para realizar uma operação onde eu busco um determinado aluno do banco à partir de sua identificação, eu dependo do DAO. Se eu quiser testar esta operação, testar aqui no command não é mais simples? Ou testar em um outro pojo qualquer é mais fácil também! Melhor colocar este código no command ou pojo para os íntimos do que em um session bean ou servlet!
humm…
Philip, com a colocação que vc está fazendo, estou entendo é que deveríamos fazer isso:
Aluno a = new Aluno();
a.load(ident);
double media = a.calculaMedia();
System.out.println(media);
Acabei de mover a lógica de acesso ao banco para dentro do método load da classe Aluno. Foi isso que entendi quando vc escreveu
No meu entender, nos dois exemplo que citei a lógica de negócio está dentro do POJO.
Um exemplo orroroso em minha opinião seria isso aqui: Sentem-se para não cairem de costas… e não façam isso em casa!!
[code]
public void execute(String ident) {
AlunoDAO dao = new AlunoDAO(); // 1
Aluno a = dao.load(ident); // retorna um aluno
double media = a.getMedia1() + a.getMedia2() + a.getMedia3() + a.getMedia4();
media /= 4;
System.out.println(media);[/code]
Agora sim a lógica de negócio não está dentro do POJO.
Afinal, no primeiro exemplo que citei, o que há de errado??? O que poderia ser melhorado???
Abraços!
Thiago