eu tava lendo alguns textos que falavam de transfer object, e eu vi a implementação dele…ele parece ser um javabean…é isso mesmo?
qual a diferença para um javabean?
no meu caso eu tenho um servlet(controller) um bo e um dao(ambos model)…
eu quero pegar alguns dados do meu banco de dados…
então eu acesso o meu bo e depois o meu dao. O dao cria o TO e retorna para o bo que retorna para o meu servlet para que os dados possam ser exibidos…
se eu não usar um TO qual seria a alternativa?
Leia novamente o segundo link que o Thiago Senna postou.
Ele serve para encapsular diversas chamadas de rede numa só. Então te pergunto: seu banco de dados está fisicamente num lugar distante do local físico onde os servlets se encontram? Não? Então não precisa dessa gambiarra horrível \o/
É só uma das possibilidades de implementação do DAO. E mesmo no catálogo dos TO, eles são bem enfatizados o uso junto com EJB´s(geralmente aplicações distribuídas). Uma das principais vantagens de um TO é reduzir o tráfego de rede.
Você não precisa criar um objeto alienígena deste só pra passar de uma camada pra outra. Retorne uma Collection, ou o próprio objeto.
Para com isso… vc me obrigou a me lembrar do dia que exibe uma arquitetura como esta como meu maior trunfo no meu projeto de final de curso!
JDeveloper, eu quando comecei aqui no guj tinha a mesma dúvida que você! Eu li o mesmo livro q vc, e cheguei nas mesmas conclusões q vc e o pior, cheguei nesta mesma arquitetura! Vc dúvida?? Veja isto entaum uma bagunça que eu tinha aprontado aqui no fórum!
Então, como vc não está trabalhando em um ambiente distribuído, esqueça o TO, esqueça o BO e mandem todos eles para a pqp!
Ao invés de vc sair criando classes como AlunoTO e AlunoBO, cria uma classe aluno logo de uma vez! É muito mais elegante e mais fácil. Ele guarda dados referente ao objeto e ainda encapsula as lógicas de negócio!
Com certeza, as únicas coisas que serão úteis no seu projeto são os DAO’s, e dependendo do tamanho do projeto, um AbstractFactory ou Façade já poderá ajudar bastante!
Agora pegue um pedaço de papéu e escreva 100x “Eu nunca vou usar DTO em sistemas não distribuídos!”
[quote=pcalcado]Seu objeto de negócios (dica: evite esse padrão de nome de classes) acessa o DAO?
[/quote]
qual o problema com o nome?
Eu tenho que fazer um cadastro via web. Então o usuário preenche os campos e dá um submit.
O meu servlet pega a requisição e chama o meu bo para validar campos e etc. O bo então chama o dao para persistir os dados, caso os mesmos sejam válidos…
isso não está correto?
Eu tenho que fazer um cadastro via web. Então o usuário preenche os campos e dá um submit.
O meu servlet pega a requisição e chama o meu bo para validar campos e etc. O bo então chama o dao para persistir os dados, caso os mesmos sejam válidos…
isso não está correto?[/quote]
Funciona? Então está correto.
Só que tudo pode ser melhorado,e quanto mais você se preocupar com design do seu sistema, menos chance de virar noite dando manutenção em bugs bizarros.
Eu gosto de usar DTO nas minhas arquiteturas, sendo elas distribuidas ou não, por exemplo para montar frameworks vc precisa utilizar um DTO para transferir os dados de uma camada para outra abstraindo assim por exemplo qual a interface que vc utiliza e deixando a regra de negocio limpa… utilizando apenas seus BO na camada de negócio não levando ele para a camada de interface…
[quote=wellmattos]Eu gosto de usar DTO nas minhas arquiteturas, sendo elas distribuidas ou não, por exemplo para montar frameworks vc precisa utilizar um DTO para transferir os dados de uma camada para outra abstraindo assim por exemplo qual a interface que vc utiliza e deixando a regra de negocio limpa… utilizando apenas seus BO na camada de negócio não levando ele para a camada de interface…
[/quote]
Aí você faz:
class Usuario{
private String nome = null;
private String endereço = null;
private int idade = 0;
//gets e sets
}
E tem um DTO/TO/VO:
class UsuarioVo{
private String nome = null;
private String endereço = null;
private int idade = 0;
//gets e sets
}
Exatamente igual? Para que?
Para usar frameworks decentes (ou até indecentes como Struts) você não rpecisa de VO. Aliás, você só rpecisa deles numa arquitetura altamente distribuída (que as blueprints do JEE sempre prezam, mas que quase nunca acotnece no mundo real).
Eu tenho q fazer um sistema que faz a inscrição de um usuário online.
Então ele tem basicamente que preencher um cadastro pessoal e de acordo com o tipo de opcao de inscricao q ele escolhe o sistema exibe uma ou outra opção nas telas.
Eu pensei em fazer o seguinte:
Usar um jsp como minha camada de apresentação.
Usar um servlet como controlador.
Usar um BO e um DAO como meu model.
Então o usuário preenche o cadastro(jsp) e envia para o servlet. Esse servlet pega os dados do usuário, armazena em um objeto e envia para a minha camada de negócios para basicamente validar campos.
Se os dados digitados pelo usuário estiverem corretos eu passo esse objeto para a minha camada de negócios para q ele possa ser persistido.
Está correto. E basta um objeto Aluno, um AlunoDAO e um CadastroServlet para isso
class CadastroServlet {
public void execute() {
Aluno aluno = new Aluno();
// popula o objeto aluno com os dados da request
if( !aluno.validate() ) {
// redireciona de volta com os error
return;
}
AlunoDAO dao = new AlunoDAO();
dao.save( aluno );
// ou quem sabe
aluno.save(); // aluno que chama o DAO
}
}
[quote=LIPE]Está correto. E basta um objeto Aluno, um AlunoDAO e um CadastroServlet para isso
[code]
class CadastroServlet {
public void execute() {
Aluno aluno = new Aluno();
// popula o objeto aluno com os dados da request
if( !aluno.validate() ) {
// redireciona de volta com os error
return;
}
AlunoDAO dao = new AlunoDAO();
dao.save( aluno );
// ou quem sabe
aluno.save(); // aluno que chama o DAO
}
}
[/code][/quote]
não seria melhor criar mais uma classe para validar os dados…ao invés de validar os dados dentro do servlet…?