Dúvidas em relação à organização lógica da aplicação [Padrões, Camadas]

3 respostas
V

Olá pessoal, tudo bem?

Estou estudando Arquitetura de Software e trabalho em um sistema que está implementado utilizando Transaction Script. A lógica da aplicação está toda contida nos Servlets, o que é um erro. Com o passar do tempo, começamos a ter código duplicado na aplicação e decidimos parar para refatorar o código.

O sistema possui um front-controller e commands para facilitar a adição de novos controladores.
Estou utilizando o padrão Data Mapper (Martin Fowler) na camada de acesso a dados:

Aí me surgiram algumas dúvidas!
Se o modelo não conhece nada sobre o banco, qual classe seria responsável por chamar meus DAOs?
Eu criei classes de serviço (façade) para tal feito mas não sei se é o correto!

Outra dúvida é a seguinte, se o certo é criar camadas de serviço mesmo, como fica as interfaces das classes de serviço? Eu passo os parâmetros ou passo o objeto do modelo?

Exemplo:

adicionarCliente(String nome, String endereço)

ou

adicionarCliente(Cliente cliente)

Talvez a segunda abordagem seja a mais correta, mas no caso da classe conter associações, eu recebo da jsp apenas o id dessa associação e eu teria que ir no banco antes só para pegar o objeto para passar para o método do serviço. Pensando nesse tipo de situação, a primeira abordagem me parece oferecer um custo computacional melhor. Não sei se ficou claro, mas o que eu quero dizer é o seguinte:

Suponha que eu tenha uma classe cliente e dependentes e que cliente possua uma lista de dependentes. Se eu utilizar a primeira abordagem, seria algo assim

adicionarCliente (String nome, String endereço, String[] listaIdsDependentes)

Se eu utilizar a segunda abordagem, ficaria algo assim:

adicionarCliente (Cliente cliente)

e eu teria que ir no banco para pegar os dados dos dependentes e formar o objeto Cliente para então passar para o método do service:

cliente.setDependentes(new DependentesDAO().getListaDependentes(listaIdsDependentes));

Uma dúvida, neste caso, é correto eu acessar o banco para pesquisa no servlet? Já que pesquisa geralmente não tem lógica.

3 Respostas

L

VagnerMG:

Aí me surgiram algumas dúvidas!
Se o modelo não conhece nada sobre o banco, qual classe seria responsável por chamar meus DAOs?

Eu criei classes de serviço (façade) para tal feito mas não sei se é o correto!

O Front controller chama o DAO.

Sobre a classe de serviços, alguém vai ter que chama-la do mesmo jeito, não sei o que espera conseguir criando mais uma camada intermediária e aparentemente desnecessária, visto que o DAO já é um tipo de facade.

Desde que não seja no model que não conhece nada sobre consultas e inserções, não vejo nenhum problema em fazer no servlet.

Como falei, o frontcontroller (o servlet) chama o dao e normalmente o dao oferece todas operações de banco, inserir, consultar…

V

lkbm:
VagnerMG:

Aí me surgiram algumas dúvidas!
Se o modelo não conhece nada sobre o banco, qual classe seria responsável por chamar meus DAOs?

Eu criei classes de serviço (façade) para tal feito mas não sei se é o correto!

O Front controller chama o DAO.

Sobre a classe de serviços, alguém vai ter que chama-la do mesmo jeito, não sei o que espera conseguir criando mais uma camada intermediária e aparentemente desnecessária, visto que o DAO já é um tipo de facade.

Desde que não seja no model que não conhece nada sobre consultas e inserções, não vejo nenhum problema em fazer no servlet.

Como falei, o frontcontroller (o servlet) chama o dao e normalmente o dao oferece todas operações de banco, inserir, consultar…

obrigado pela resposta!

Bom, de acordo com o que estou estudando, não é legal ter lógica de negócio no servlet. O servlet é somente para validação de parâmetros e lógica de apresentação, se houver!

O problema da lógica ficar no servlet é que pode ocorrer replicação se você precisar a mesma lógica em outros lugares, por isso que é recomendável a lógica de aplicação ir para a classe de serviços e a lógica de negócios ir pro model.

Estou estudando pelo livro do Martin Fowler mas ainda tenho algumas dúvidas, como as que eu postei acima!

L

não disse que as regras de negócio ficam no servlet, e sim as operações de banco.

Criado 15 de setembro de 2014
Ultima resposta 18 de set. de 2014
Respostas 3
Participantes 2