Fluxo dos dados em MVC

Pessoal, estou aprendendo sobre as aplicações MVC.

Como no meu caso estou estudando para usar Hibernate 3.5/JPA 2.0, Spring 3 e no Front-End dois Viewers distintos, um Swing e outro Web. O Web, possivelmente será restrito a algumas páginas simples, por enquanto.

Para ficar mais claro, gostaria de saber se alguém poderia me ilustrar melhor, ou seja, literamente “desenhar” para ver se eu entendo definitivamente essas coisas:

Por exemplo:

±----------±------------±-------------+
| Model | Controller | View |
±----------±------------±-------------+

Onde ficaria cada Framework? Tenho idéia que a maioria das classes do JPA ficariam em Model. Mas será? Elas não atravessariam as fronteiras em direção ao “Controler” as vezes? E o Spring? Nessa as dúvidas são ainda maiores: Ele nunca chega a camada de modelo ou de view ?

Enfim, quais patterns são geralmente usandos em cada camada? As vezes, tirando uma dúvida, vejo alguém fazer referência a “camada de negócio” de forma genérica, o que confunde mais pois não sei se está falando de Modelo ou Controlador… Pra mim ainda fica difícil entender direitinho o que vai onde…

Exemplo: Um DAO vai no modelo ou no Controller? Ou nos dois?

Como seria o Fluxo dos dados? Exemplo: Um dado que está no View para ser persistido: Quando o usuário acionar o comando para persistir a informação que está armazenada em um controle na View, passo esses dados para o Controler e ele passará para o modelo persistir, certo? Mas explicitamente, passo esses dados para qual pattern no Controller? Depois ele passa para qual pattern no Model para esse, enfim, salvar?

E no fluxo contrário? Para recuperar um dado persistido, quem faz? O DAO ? Ele deve ircarregado até qual classe-pattern no Controller? Quem o envia? Chegando lá, esses dados são despejados em que outro pattern para ir para o View? Ou vai no próprio DAO até o view??

Não sei se fui claro, mas o assunto é bem extenso e complexo,… Já li sobre tanta coisa, mas ainda tenho dificuldade em montar o quebra cabeças.

Abradeço já!
[]s.

Caramba, qts perguntas …
vou tentar responder conforme vou lendo …

O Hibernate e o JPA ficaria no Model.
O Spring depende muito, pq vc pode usá-lo em todos as camadas.
O Swing e o outro web ficaria na View
O Controller vai ficar por conta do framework MVC q vc usar.

A Camada de negócio é uma camada a mais dentro do Model. Ela serve para vc, por exemplo, ao invés de criar toda a programação para gerar o relatório no seu Controller, vc cria toda essa regra na sua camada de negócio e no controller apenas chama este método que retornaria um classe com as propriedades do relatório já pronta.
Isso é muuito utilizado. É bom para a arquitetura do seu sistema.

O DAO vai apenas no model, e mais ainda, apenas na sua camada de serviço(camada de negócio). Seu Controller só vai chamar o método do serviço, que este chama os DAOs necessários.

O fluxo ficaria mais ou menos assim. Se vc estiver usando o JSF como framework para MVC, os dados da view será passado para seu controller de maneira simples e automática, tendo em vista que já está tudo ligado a view com as propriedades no Controller. A partir daí vc chama o método no serviço passando os dados q vieram da view. No serviço ele pega esses parâmetros passados e faz o q tem q fazer.
Para o contrário, por exemplo, seu botão da view chama um método no Controller, que chama um método no serviço, que carrega o que precisar no banco e devolve até chegar de novo na view.

Isso é mais programação em camadas do que apenas MVC… tipo assim, o DAO vai na camada de persistência que conhece a camada de modelo e o banco de dados :smiley:

Não conheço muito Spring, mas acho que ele cobre parte de Persistencia e Controle,

Modelo é onde ficam as regras de negócio, bem como o estado dos seus objetos

Struts é mais para camada de controle,

JSF/PrimeFaces/etc. são para a View

E assim vai :smiley:

[edit] aluisiodsv na frente por 56 segundos :shock: nem tinha visto quando postei xD [/edit]

AUhauhauhUahuAUhuauh … pois ehh …

Mas o JSF é um framework MVC, apesar da forte ligação com a view. Se bem que, se for pensar assim, o Struts não consegue fazer a camada de controle para uma aplicação em Swing(Não q eu saiba).

é eu também não conheço aplicação do Struts para desktop, foi só um exemplo mesmo…

Meu ponto é que não existem só camadas de modelo view e controle, e também que alguns frameworks permeiam mais do que apenas uma camada…