Camada service x repository e dao

Gente…

Tenho procurado entender como projetar uma aplicação em camadas.

Consegui compreender que se tratando de uma aplicação web JSF eu posso ter as seguintes divisões de camadas implementando o padrão MVC

[VIEW] e [Controller]:
-apresentação —> xhtml…etc.
-Nesse caso, o backbean é responsável por gerenciar as minhas telas e fazer chamadas a camada de serviço

[Model]
-service —> camada responsável por fazer a comunição entre a view e a dao, fazendo tratamentos e conversões de dados, passando os dados de maneira clara para ambas as camadas - (regra de negócio)

-DAO ou Repository - Acesso aos dados


Para concluir, uma das soluções para diminuir o acoplamento entre as camadas é usar o padrão IOC - DI Spring 3. Penso que posso fazer injecção de depencia tanto da da view para service como da service para dao.

No que puderem contribuir agradeço…

Abraços!!!

up!

O tópico ficou escondido!

Aplicações “Component-Based” que é o caso do JSF encapsula algumas camadas e possibilita um desenvolvimento mais rápido. Utilizando JSF você tem um ciclo de 7 fases que cuida de conversões, validações, transformações e etc…

Já uma aplicação “Action-based” que é o caso do Struts, vc normalmente declara classes responsáveis por fazer a comunicação entre modelo, apresentação e controlador.

Para que fique mais claro, no JSF vc não possui um controlador, já que o framework se encarrega de associar a sua apresentação com o seu “bean”. E apenas como comentário à sua pergunta, modelo não é onde você comunica “view e dao”, modelo é todo o conceito de negócio que existe na sua aplicação.

[quote=Giulliano]Aplicações “Component-Based” que é o caso do JSF encapsula algumas camadas e possibilita um desenvolvimento mais rápido. Utilizando JSF você tem um ciclo de 7 fases que cuida de conversões, validações, transformações e etc…

Já uma aplicação “Action-based” que é o caso do Struts, vc normalmente declara classes responsáveis por fazer a comunicação entre modelo, apresentação e controlador.

Para que fique mais claro, no JSF vc não possui um controlador, já que o framework se encarrega de associar a sua apresentação com o seu “bean”. E apenas como comentário à sua pergunta, modelo não é onde você comunica “view e dao”, modelo é todo o conceito de negócio que existe na sua aplicação.[/quote]

1- O backbean pertence a qual camada ?

2- Uma vez que o JSF já tem suas validações, não preciso tê-las na camada service ?

O “BackingBean” é o seu contolador. É ele quem faz as chamadas para o seu modelo.

As validações do JSF garantem que nenhum dado que venha de uma página JSF esteja inválido, porém a partir do momento que você deseja expor algum método como serviço, esta validação não será válida. Aqui cabe um pouco de análise, será que seu sistema irá expor os seus “services” além das chamadas para as páginas do JSF. Se sim, será necessário validar tudo de novo.

Existem dois tipos de validação, as validações técnicas (verificar nullpointer, verificar data, verificar bigdecimal) e validações de negócio, procure separa-las para ter um melhor reaproveitamento.

Sim…vc esta no caminho certo…
Para clarear mais as ideias, leia o livro DDD do Eric Vans, uma vez que ele aborta o padrão de camadas em aplicações corporativas.