Olá pessoal, estou estudando JSF e estou com algumas dúvidas:
O JSF segue o padrão MVC.
Pois bem:
O que entendo é Views(páginas) referenciando-se diretamente com o Modelo e vice e versa.
O Controle é abstraído? é a cargo do JSF?
Eu pensava que Manager beans fizesse parte do Controle e gerenciava o modelo(backing bean), mas pelo meu entendimento através dos materiais que estou estudando o Backing Bean seria o Modelo e o Manager Bean seria o mapeamento do Modelo pelo JSF. está correto?
Qual a seria estrutura de pacotes da minha aplicação?
Quais as classes que fazem parte da Visão e quais fazem parte do Controle?
Este é um assunto bem delicado com varios pontos de vista, bom fixando a ideia que o MVC é usado 99,999…% na camada da apresentação, vamos lá:
No caso do JSF eu intendo V = (paginas xhtml, jsp) , C (FacesServlet + facesconfig) , M(ManagedBean)
No caso o Modelo é ponto mais delicado no conceito no JSF, muitas pessoas falam que o ManagedBean é o controlador e o modelo são as regras da aplicação como EJB e tals, mas ao meu ver se usarmos o conceito de que o modelo chama as regras de negocio e não implementa, o ManagedBean pode ser usado como modelo, ou melhor, um tipo de “interface” do modelo.
Estava com essa dúvida, e ainda estou , mas já esta mais claro pra mim, o que entendi pelos post, tutorias etc é o seguinte:
não pensando em mvc ainda, no jsf existe a view, o bean, e sua classe normal Java, que pode conter o negocio de sua aplicação e as anotações para acesso ao banco. Pensando nas camadas MVC, algumas pessoas em fóruns, falam que as sua classe de negocio, a dao, poderiam ficar no pacote MODELO. As páginas xhtml fica no pacote VIEW, e os beans, no caso o backbean, fica no pacote controle, enfim, pelo que vi existe mais de uma forma de organizar sua aplicação de acordo com seu entendimento e gosto. O conceito de controle no jsf pelo que sei é que ele faz a interligação do view com o modelo, e no meio disso fica o bean ou backbean. O MVC diz pra você com os componentes da aplicação interagem, e não como separa as camadas. Então você não deveria usar o MVC pensando em como separar as camadas. Você precisa pensar em como os componentes de sua aplicação se interagem e apartir disso separa seus pacotes.
O método que estou adotando é fazer tres pacotes, modelo, dao e view.
No modelo eu deixo minha classe java com os get e set, e as anotações do banco. Observe que essa classe em si tem o conceito de um bean. Ela pode representar um bean. Mas o que eu faço é o seguinte: deixo essa classe so com os getrs e setrs e as anotações do banco. Ai no pacote controle eu criu uma classe java que vai ter a anotação manageBean, e instancio nessa classe um objeto do modelo, e coloco os getrs e setrs desse objeto , ai nessa classe eu faço os métodos que vão pega as informações da view e passar pro modelo.
No pacote dao eu crio somente o acesso ao banco de dados para cada modelo.
Da classe no controle anotada com mangeBean eu chamo esses métodos da dão para fazer as operações.
Na view faço as paginas xhtml, preenchendo o objeto do modelo que está no pacote controle. É isso, fico confuso, mas a realidade é que muito confuso mesmo, mas pode te ajudar em algum ponto. Alguém corrija algum erro ai por favor.
[quote=prjava]Estava com essa dúvida, e ainda estou , mas já esta mais claro pra mim, o que entendi pelos post, tutorias etc é o seguinte:
não pensando em mvc ainda, no jsf existe a view, o bean, e sua classe normal Java, que pode conter o negocio de sua aplicação e as anotações para acesso ao banco. Pensando nas camadas MVC, algumas pessoas em fóruns, falam que as sua classe de negocio, a dao, poderiam ficar no pacote MODELO. As páginas xhtml fica no pacote VIEW, e os beans, no caso o backbean, fica no pacote controle, enfim, pelo que vi existe mais de uma forma de organizar sua aplicação de acordo com seu entendimento e gosto. O conceito de controle no jsf pelo que sei é que ele faz a interligação do view com o modelo, e no meio disso fica o bean ou backbean. O MVC diz pra você com os componentes da aplicação interagem, e não como separa as camadas. Então você não deveria usar o MVC pensando em como separar as camadas. Você precisa pensar em como os componentes de sua aplicação se interagem e apartir disso separa seus pacotes.
O método que estou adotando é fazer tres pacotes, modelo, dao e view.
No modelo eu deixo minha classe java com os get e set, e as anotações do banco. Observe que essa classe em si tem o conceito de um bean. Ela pode representar um bean. Mas o que eu faço é o seguinte: deixo essa classe so com os getrs e setrs e as anotações do banco. Ai no pacote controle eu criu uma classe java que vai ter a anotação manageBean, e instancio nessa classe um objeto do modelo, e coloco os getrs e setrs desse objeto , ai nessa classe eu faço os métodos que vão pega as informações da view e passar pro modelo.
No pacote dao eu crio somente o acesso ao banco de dados para cada modelo.
Da classe no controle anotada com mangeBean eu chamo esses métodos da dão para fazer as operações.
Na view faço as paginas xhtml, preenchendo o objeto do modelo que está no pacote controle. É isso, fico confuso, mas a realidade é que muito confuso mesmo, mas pode te ajudar em algum ponto. Alguém corrija algum erro ai por favor.
Até hoje a explicação mais direta que li sobre a confusa arquitetura MVC com JSF foi nesse artigo e aqui onde compara com arquitetura MVC empregada nos frameworks action based (onde é bem mais claro o MVC, sem precisar desvendar nada).
valeu pela sugestão dos links javaflex, entrei nas páginas rapidamente mas deu para perceber que são ótimos post que irá abrir a minha mente. vou ler depois com mais calma.