Olá GUJ’s…
No projeto de final de curso da faculdade estamos utilizando o TO para tranferir dados entre camada de controle e negócio. Já a troca de dados entre camada de apresentação e controle tenho algumas dúvidas mas postei essas dúvidas aqui no GUJ neste endereço…
http://www.guj.com.br/posts/list/21002.java
Agora gostaria de entrar em alguns detalhes de implementação do TO.
No meu projeto estou utilizando na camada de negócio os patterns.
[list]Façade[/list]
[list]Application Services[/list]
[list]Businnes Objects (BO)[/list]
[list]Transfer Objects (TO)[/list]
[list]Data Access Objects (DAO)[/list]
Em geral, é no façade onde a histório começa recebendo um TO por parâmetro… e ele por sua vez quando precisa retornar dados para a camada controle sempre vai retornar um TO.
Mas a minha dúvida principal é:
Qual é a melhor forma para converter um BO em um TO e vice versa??? Vou listar abaixo algumas sugestões que andei pensando, daí eu gostaria da opinião e sugestões de vocês se for possível.
Opção 1: Utilizar um método setData e getData dentro do BOfortemente acoplado com código de conversão.
public class AlunoBO {
// atributos
// métodos acessores
// método para converter TO para BO
public void setData(AlunoTO to) {
// conteúdo do método para conversao
// exemplo : this.atributo = to.getAtributo();
}
// método para converter BO para TO e vice versa
public AlunoTO getData() {
// conteúdo do método para conversao
// exemplo : to.setAtributo(this.atributo);
return to;
}
}
Opção 2: Utilizar método setData e getData dentro do BO, no entanto, com o código de conversão dentro de uma classe separada responsável somente pela conversão.
public class AlunoBO {
// atributos
// métodos acessores
// método para converter TO para BO
public void setData(AlunoTO to) {
// Chama uma classe responsável pela conversão
AlunoConversao alunoConversao = new AlunoConversao();
this = alunoConversao.convertoParaBO(to);
}
// método para converter BO para TO e vice versa
public AlunoTO getData() {
// Chama uma classe responsável pela conversão
AlunoConversao alunoConversao = new AlunoConversao();
alunoConversao.convertoParaTO(this);
}
}
Opção 3: Eliminar os métodos setData e getData do BO. Toda a conversão deverá ocorrer no ApplicationService, Action, Command ou Façade.
public class AplicacaoFacade {
// método para converter TO para BO
public void cadastraAluno(AlunoTO to) {
AlunoBO bo = new AlunoBO();
AlunoConversao conversao = new AlunoConversao();
bo = conversao.converteParaBO(to);
// realiza outras atividades
}
}
Bom, essas são as opções que pensei… Eu aprecio mais a terceira opção, mas como sou inexperiente, acredito que você devem ter terceiras, quartas, quintas e até vigésimas opções!!!
Desde já agradeço!
Thiago Senna