Jsf x mvc

13 respostas
J

Pessoal desde já agradeço a todos que colaborar…

Li bastante a respeito do funcionamento do modelo MVC…entendi a separação das camadas etc…

to estudando muito agora o framework JSF…

minha dúvida é a seguinte:

a camada de Controller é responsável por interligar o M e V, para que eles não se comuniquem diretamente, então se eu tiver usando um framework JSFessas classes que seriam de Controller serão apenas as configurações que tenho no faces-config.xml ou teoricamente terei minhas classes java mesmo…isso ficou confuso pra mim…

Imagem o seguinte um simples login:

View :
Classe que representa o formulario com login e senha e um submit.

Model:
Meu bean do usuario tambem com campos de login e senha.
Método VERIFICALOGIN() que verifica se o login e senha estao corretos

Persistence
Minha classe que verifica no banco os dados

aqui a duvida: CONTROLLER:
neste caso o fluxo seria a action do submit chamar este controller, ele chama o método do MODEL VERIFICALOGIN() que verifica se esta correto login e senha, e aguarda uma resposta String de sucesso ou falha, se sucesso chama pagina logado, se falha chama a mesma pagina pra inserir novamente…

Este fluxo está correto?
o método VERIFICALOGIN() deve ficar no meu pacote MODEL? esta correto?

13 Respostas

A

Seguinte, voce ja leu alguma coisa sobre o que é um bean, baum o bean ele geralmente tem seus atributos e um construtor vazio, neste caso se o metodo de validar usuario não poderia estar no bean, pois quebraria a essencia do bean, ele ficaria no controller, pq ele esta ai para justamente fazer com que a camada de visualização não interaja com a do modelo.

esper ter ajudado.

J

valeu Alessandro_Alves,

acho que expressei mal neste ponto, mas minha intenção é que o Método VERIFICALOGIN() fique num classe dentro do pacote MODEL, não dentro da classe do bean entende, seria numa classe onde faço algumas logicas envolvendo o usuario…

Porque em varios lugares que li do MVC, sempre dizia que a LOGICA DE NEGOCIOS ficaria dentro do MODEL, por isso minha dúvida, OS METODOS de negocio, ficam mesmo dentro do PACOTE MODEL, ou ficam no CONTROLLER…entende…

talvez eu tenha lido um conteudo sobre MVC em que o autor não foi feliz no comentário e acabou me confundindo…

A

Cara seguinte, realmente a logica de negocio fica no modelo o controller somente server para fazer a trasição das paginas, pq a forma como eu entendi o que vc explicou abaixo, parecia que o bean estava fazendo a logica. Espero ter ajudado ae

abrçs

vlws

J

Olá,

Este tópico pode ficar bastante interessante então vou postar minha visão também =)

Começando do começo, o JSF é uma “implementação” do padrão Model 2, que na verdade é o padrão MVC adicionado do padrão Front Controller.

A View do JSF é praticamente composta por páginas JSF. Aqui é fácil.

Já o controle é um pouco mais difícil de entender visto que o JSF implementa parte dele para nós. A idéia do Model 2 é justamente prover um controle central, representado pelo Servlet do Faces.

O JSF não conhece sua aplicação, portanto, não poderia realizar todos os mapeamentos de eventos de tela em ações do modelo certo? Então esta parte do controle nós precisamos implementar. Daí entra os chamados Backing Beans, são eles que possuem os métodos que serão disparados pelo JSF quando determinado evento ocorrer. Estas classes também fazem parte do controle.

Agora, vamos para o modelo. A discussão aqui (nesta camada) pode ser extensa. A primeira abordagem é utilizar sempre POJO´s, ou seja, temos objetos fantoches que são “burros”, só possuem os atributos e os getters e setters. Não estou dizendo que isso é ruim, é apenas uma abordagem.

Se vc considerar que seus POJO´s não possuem nada além de getters e setters, alguém terá que realizar operações sobre essas classes para implementar as regras de negócio do sistema. Algumas pessoas optam por deixar o Backing Bean fazer este tipo de coisa, ou seja, o seu método verficarLogin() ficaria no BackingBean. Não minha opinião isto não é o ideal visto que Backing Bean faz parte do controle e não do modelo, o que também acarreta problemas de reaproveitamento de código.

Uma outra abordagem é criar uma camada de serviço (Service Layer), que é um padrão de projeto empregado com certo sucesso recentemente. A idéia aqui é deixar que esta camada, que faz parte do modelo, realize operações sobre os POJO´s. Dessa forma, nossos backing beans apenas mapeiam eventos de tela para chamadas de “serviços” nesta camada. Aqui, teríamos um método no Backing Bean, actionVerificarLogin() por exemplo, que invocaria o método verificarLogin() da camanda de serviço.

Outra abordagem que conheço é tornar seus POJO´s mais inteligentes e deixar lógica de negócio neles. Neste caso, o método verificarLogin() ficaria na classe Usuário.

Cada caso é um caso. Eu atualmente utilizo a abordagem da Service Layer pois ela tem outros benefícios que eu preciso. No entanto, em outros projetos estou inclinado a utilizar objetos mais inteligentes e empregar a OO de forma mais “pura”.

Para mais referências sobre esses assuntos eu sugiro a leitura dos livros Java Server Faces in Action de Kito D. Mann e do Patterns of Enterprise Application Architecture do Martin Fowler.

Desculpem o tamanho do comentário mas como eu disse, o assunto é interessante principalmente para quem está começando.

J

Caro jsp_dev,
muito obrigado pela resposta, tu me esclareceu tudo que eu precisava, 100%… o ponto que eu queria chegar vc foi direto nele, valeu mesmo cara obrigado…

F

Aproveitando o tópico, como ficaria a divisão de camadas de acordo com o escopo dos beans?

Estou usando a seguinte divisão. Para cada página:

  • Bean com escopo de requisição para tratar eventos
  • Bean com escopo de aplicação para armazenar os dados informados e para as regras negócio
F

Justamente por isso que eu nãoacho nada errado o Backing Bean ter o método autentica(), logon(), etc.

Eu reparei que o JSF é mais OO do que outros frameworks.

T

Eu já entrei em vários outros tópicos, li sobre mvc e como cada um diz uma coisa, ainda tenho dúvidas.

A explicação do cara aí em cima foi uma das melhores que vi. Porém fico inseguro em acreditar em tudo q ele disse (não me leve a mal! Nada pessoal!).
Então eis aqui minha dúvida:

O VIEW também pode conversar diretamente com o MODEL ???

R

No JSF você não tem o poder sobre a camada controller…

Essa camada está interna no framework…

Com isso podemos considerar que uma aplicação escrita em JSF não terá uma camada controller…

No JSF você chama as páginas diretamente (sem passar por camada controller da aplicação).
O JSF lê a página que contem tags, essas tags determinam a construção de uma árvore de componentes. Essa árvore de componentes são objetos Java que representam a estrutura da página.
A renderização da página acontece quando ela é transformada para o cliente (transformada em HTML por exemplo). Um renderizador anexado a cada componente produz o HTML.
Em determinados pontos dessa renderização podem ser necessárias informações do sistema, os componentes estarão previamente mapeados com dados de onde essas informações devem ser buscadas (quando vc faz #{meuBean.minhaPropriedade por ex}).
Assim, quando algum componente for renderizado e houver alguma referência a um código na aplicação (backing beans) esse código será chamado.
As vezes pode ser uma propriedade as vezes pode ser um método.

Uma situação que acontece muito é que determinados métodos mapeados nesses componentes são chamados mais de uma vez para a mesma renderização de tela, o que causa problemas para alguns desenvolvedores.

R

Você não terá suas classes Java mesmo, que recebem a requisição e fazem algum processamento e enviam para a view…

G

Essa do MVC é complicado para todos, certa vez em um forum encontrei um desenho do mvc e ai solucionou todas as minhas duvidas. Espero ajudar a imagem está anexa.

P

Mais conteúdo sobre MVC recomendo acessar este link: http://www.guj.com.br/posts/list/129277.java
Cuidado: Não confunda MVC com CAMADAS (Layer’s). Uma coisa é MVC, outra coisa é Layer’s!
Espero ter colaborado! :wink:

A

estou iniciando em JSF… e percebi isso algumas vezes. qual a razão disso?

Criado 22 de outubro de 2007
Ultima resposta 5 de ago. de 2010
Respostas 13
Participantes 10