Boa noite pessoal,
Estou estudando JSF e fazendo a revisão de uma aplicação proposta por um material da comunidade.
Gostaria de levantar esta questão (título) porque não encontrei a real localização dentro do modelo MVC para uma classe/objeto do tipo Managed Bean.
O Java Server Faces tem como proposta aproximar a web de uma plataforma desktop, tornando assim, quase imperceptível para o usuário suas requisições sobre objetos persistentes.
Nota: Alguém já programou algum software desktop aplicando o modelo MVC?
Demoro pra responder ein! rs.
Pois bem. Então como levar a web a este patamar e manter o MVC como costumeiramente está.
Exemplificando:
Fluxo no Modelo MVC convencional:
[ loop ]... render view :: submit form view :: browser process :: server process [ request :: response ] :: switch view for :: render view ... [ / loop ]
Um dos tipos de fluxos do Modelo classico Desktop/JSF:
[ static ]... render view :: ajax interactive action :: server process [ request :: response ] :: stop [ / static ]
CRUD Modelo desktop
O poder da View (página renderizada) utilizando o JSF vai muito além do que comumente encontra-se em convencionais aplicações web.
Basicamente você pode fazer tudo a partir da view (CreateReadUpdateOrDelete).
Sim, a view tem o poder, mas não se enganem, por traz de toda jsf view tem sempre uma boa e nova Managed Bean.
E quem seria a Managed Bean no modelo MVC ?
Seria uma model ?
Uma Bean é uma model, pois representa uma entidade (tabela).
Uma DAO (http://pt.wikipedia.org/wiki/Data_Access_Object) é uma model de interação com a base.
Mas e a Managed Bean! Quem és tu?
Seria uma view ?
A primeira pergunta para responder a questão é: A Managed Bean está alocada no cliente ou no servidor?
Resposta de atrapalhar: No servidor. Mas solicitada em tempo de execução (Real Time) por blocos EL (Expression Language) alocados na VIEW.
Seria a Controller ?
Hunn, é com quem, na minha humilde opnião, mais se parece no contexto exposto pois exerce funções similares a de uma Controller, tais como:
Resgate e validação de objetos e atributos da view (BEANs).
Funções para chamadas de objetos manipuladores de instâncias persistentes (DAOs).
Retorna a view conforme o processo (successOrfailure).
Este ultimo processo, mapeamento de views, é dado no JSF1 a partir de um arquivo de configuração, o faces-config.xml, este ultimo, é também, responsável por armazenar o escopo de cada Managed Bean de um sistema (managed-bean-scope).
No JSF2 é possivel mapear a url e as Managed’s Bean’s via annotations sobre as mesmas. Algo parecido com o que aconteceu com o Struts.
Bom é isso, estou levantando a discussão sobre quem és tu Managed Bean no contexto MVC?
Outra nota que também vale a pena levantar, aproveitando o gancho é: Seria realmente mais produtivo e organizado efetuar todas as quatro operações (CRUD) sobre uma mesma interface web, tal qual aplicativos desktop?
Outra questão é: Para que usar uma ferrari para fazer o serviço de um ol bolinha?
Eu prefiro uma Ferrari mas …
Abçs.
Jsign