Dúvida OCWCD (Padrão MVC + FrontController)

Bom dia Pessoal, estou no último capitulo do livro Servlet e JSP, estou me preparando para o exame OCWCD, e fiquei um pouco que confuso em algumas paginas desse capitulo…

vamos lá.

Primeiro o livro define o padrão MVC como visão ,controlador e modelo, tranquilo… na página 765 um comentário…

aonde seria um objeto ação…

Primeira pergunta…

  1. Esse objeto AÇÃO não seria o controlador correto? no caso do struts este objeto é são os beans que extends a org.apache.struts.action.Action certo? então eu poderia dizer que esse objeto faz parte do modelo?

Segunda pergunta…

2-)No struts o Controlador seria o org.apache.struts.action.ActionServlet ? Se Sim, porque na pagina 773 o livro descreve o seguinte…

se que extends a classe Action são os obejtos de Ação que eu falei na pergunta 1 ?

Terceira e última pergunta.

3-)Eu posso afirma que o padrão MVC não tem nenhuma relação com o FrontController ? ou seja eu posso implementar o MVC sem o FrontController , porem com o FrontController o padrão fica melhor, seria está a idéia?

Grato

Pessoal, alguem poderia me ajudar?

Grato

Erick,

  1. Sua Action ou como você chamou de AÇÃO seria seu controlador sim e estende org.apache.struts.action.Action. Este objeto não faz parte do modelo, esse objeto é sua controller, ele quem controla o fluxo das páginas e por ele você também realiza consulta a base ou algum outro tipo de repositório que você deseja.

Entenda:
Model (São seus objetos: Classe Pessoa por exemplo tem seus atributos: nome, rg, cpf, etc);
View (pode ser a JSP por exemplo. Ela traz as informações que você deseja na tela);
Controlle (Servlet, Action (no caso Servlet), ou ManagedBean (no caso JSF), etc). Faz o fluxo de navegação;

  1. O Controlador não é org.apache.struts.action.ActionServlet. O controlador é org.apache.struts.action.ActionServlet no caso do Struts. org.apache.struts.action.ActionServlet é um objeto que estende javax.servlet.http.HttpServlet e seu objeto ActionServlet possui ele.
    Lembre-se, todos os frameworks java web são baseados em servlets por baixo dos panos.

  2. MVC é um padrão de projeto que tem como objetivo tornar os itens do seu projeto coeso, ou seja, cada item é responsável por alguma função e desacoplado seus itens.
    Model: são os seus beans, View: são seus JSP’s, JSF’s, etc, Controller: seus servlets, actions, ManagedBeans, etc. Veja que cada item exerce uma função, se quiser uma classe específica com acesso a base de dados, então você faz uma classe DAO com acesso a procedure ou uma query.
    FrontController é outro um padrão de projeto e no livro ele cita o Struts como um framework que implementa este padrão.

Espero ter ajudado,
Abraços,
Thiago

thituba20 , Primeiramente gostaria de agradecer a ajudar.

Deixando claro que eu conheço o padrão MVC , o problema é que o livre me confundiu , ou eu não consegui abstrair corretamente, vamos lá

Eu intendi seu ponto de vista, então o problema é que na pag 765 livro HF ele fala que esses objetos são o Modelo… Eu concordo com o livro[quote]
*Livro
nós não gostamos de programar o modelo diretamente no código do controlador, então talvez possamos fazê-lo declarativamente
[/quote]

No caso no strtus-confg, aonde declaramos as actions para as urls .do por exemplo…

Não intendi sua afirmação, pois vc fala que o controlador não é org.apache.struts.action.ActionServlet, depois fala que é…

Sim , Concordo com vc.

A Duvida CENTRAL é que na pag 765 o livro fala que os Action são o Model e na pag773 ele fala que é o controle…

Me confundiu aqui, gostaria que vcs me ajudasse a compreender.

Muito Obrigado

Erick,

Veja, o livro cita "nós não gostamos de programar o modelo diretamente no código do controlador, então talvez possamos fazê-lo declarativamente ".
Declarativamente, diz que seria melhor você importar e utilizar o objeto model criado por você em outro pacote. Ou seja, não criar o objeto na servlet (controlador) ou então criar o model diretamente na sua JSP (View) utilizando scriptlet

Quanto ao mapeamento das actions para as urls você usa no arquivo struts-config.xml com as tag action e os atributos path, type e name.
path= nome mapeado na sua jsp no atributo action do seu atributo form.
type= nome da sua action
name= nome da sua classe form. (Estende org.apache.struts.action.ActionForm). Classe realizada para validação de campos e tratamentos específicos.

Aninhada a tag action, você usa a tag forward com os atributos name e path.
name= sua action quando der um forward no método execute, econtrará este nome.
path= caminho da sua jsp que você quer chamar.

Quanto a minha afirmação eu realmente errei na hora de digitar, desculpe. Mas corrigindo:
2) O Controlador não é org.apache.struts.action.ActionServlet. O controlador é org.apache.struts.action.Action no caso do Struts. O org.apache.struts.action.ActionServlet é um objeto que o controlador org.apache.struts.action.Action possui e é um objeto do tipo javax.servlet.http.HttpServlet.

Espero ter ajudado,
Abraços,
Thiago

Na verdade o livro diz extamente assim :

E como o objeto q colocamos no strtus- config é Action, então não seria ele o modelo?

Concorda ou não? Se vc não concordar, Quer Dizer que eu intendi tudo rsrs,falta de compreensão mesmo… =D

Correto…

Quanto essa afirmação, eu vou aceitar porque realmente o livro diz isso, então eu preciso aceitar para passar no exame rsrsrsrsr ,

Agora minha opnião própia o ActionServlet no caso do strtus seria o controle, e o no JSF o FacesServlet seria o controle, não os managedBeans. (Bom isso é para outro post)…

Me ajudou muito

Obrigado

Erick,

Não concordo, struts-config não declara só action. O que você falou sobre FacesServlet é o correto.

Abraços,
Espero ter ajudado em algo,
Thiago

Então intendi, foi falta de compreenção mesmo, tudo por causa dessa linha rsrsr…, aonde eu intendi "declarativamente " como sendo o strtus-conf, e não é aqui ele se referia a um DD padrão mesmo…

Eu sei, eu já trabalhei bastante com strtus, o que eu quis dizer é que não se declara por exemplo uma entidade (modelo) “Pessoa” , no strtus-config.

Ai já depente de varios fatores externos e ponto de vista, se vc concordar com isso vc tambem deveria concordar que um ActionServlet do strtus, seria um controlador :smiley:

Ok Erick,

Olhe as classes do Struts, veja o que eu disse:


org.apache.struts.action.ActionServlet
não é um Controlador, ele tem um Controlador org.apache.struts.action.Action

Abraços,
Thiago

Intendi, o que vc falou… bom eu vou pegar um tempo para tirar mais detalhe dessa afirmação ,por em quanto eu vou aceitar como conceito para o exame…

Mais existe muitas opnioes diferentes, veja

veja

[Quote]
Sruts the controller’s job is done by the ActionServlet.
[/Quote]

aqui ele chama o ActionServlet de controlador.

Mais em fim, me ajudou cara.

Grato