| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 08:41:41
|
kina
JavaEvangelist
![[Avatar]](/images/avatar/3db11d259a9db7fb8965bdf25ec850b9.png)
Membro desde: 04/08/2004 18:53:19
Mensagens: 340
Localização: Sampa
Offline
|
Olá galera..
eu tenho uma pergunta meu boba..
Por acaso se eu criar om FrontController (Servlet) eu poderia redirecionar ela pra outra servlet?
Digamos, estaria saindo da "função" do FrontController?
Valeu
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 08:48:18
|
Rafael Nunes
Moderador
![[Avatar]](/images/avatar/d072677d210ac4c03ba046120f0802ec.png)
Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline
|
Eu acredito que a função de redirecionamento entre recursos de uma aplicação, é função do controller.
Mas não sei até onde é gerar trabalho desnecessário enviar a requisição para um controller pra depois re-enviar para outro front controller, se pode-se enviar de um front controller diretamente para outro.
De qualquer forma, um trecho da especificação do front controller:
Use a controller as the initial point of contact for handling a request. The controller manages the handling of the request...
|
------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."
http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 09:05:09
|
kina
JavaEvangelist
![[Avatar]](/images/avatar/3db11d259a9db7fb8965bdf25ec850b9.png)
Membro desde: 04/08/2004 18:53:19
Mensagens: 340
Localização: Sampa
Offline
|
Rafael Nunes wrote:Mas não sei até onde é gerar trabalho desnecessário enviar a requisição para um controller pra depois re-enviar para outro front controller, se pode-se enviar de um front controller diretamente para outro.
Desculpe não consegui entender totalmente o que você quis dizer com isso.
Quanto ao redirecionar a requisição eu entendi.
Você está pensando que a minha intenção seria isso?
FrontController -> FrontController ->Servlet?
[obs]
não que o FrontController não deixe de ser um servlet(neste caso)
[/obs]
outro dia eu estava vendo um código ± assim:
frontController
Por acaso teria algum problema em fazer isso?
ou seria melhor eu dar um dispatcher nele?
valeu
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 09:14:18
|
jprogrammer
Virtual Machine Man
Membro desde: 04/02/2005 13:49:20
Mensagens: 546
Offline
|
Li alguns autores que recomendam vc ter uma frontcontroler que realiza todas as ações relacionadas.
ex:
Você tem uma tela que tem vários passos:
1-2-3...
O FrontController realizaria todos os passos epoderia redirecionar para diversos views diferentes.
Nunca vi ninguém especificar que um view tenha que ser uma JSP.
Pode ser um HTML, um XML, e porque não uma servlet.
Agora se sua servlet contém lógica de negócios é melhor deixar tudo m um único controler desde de que essa lógica esteja relacionada com a mesma tarefa.
|
O bom menino !!! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 09:24:31
|
Rafael Nunes
Moderador
![[Avatar]](/images/avatar/d072677d210ac4c03ba046120f0802ec.png)
Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline
|
É, nunca tinha pensado nisso.
Se eu tiver um FrontController, eu vou precisar de um Controller?
Minha idéia era de se usar o FrontController pra executar os processamentos necessários, e um Controller só para receber e direcionar requisições.
Ex:
FontrControlle->Controller->FrontController2->View
[edit]
É, pelo que vi no Core J2EE Patterns, é assim mesmo como eu imaginei, o Controller recebe e dispacha requisições, o FrontController as processa.
This message was edited 1 time. Last update was at 06/05/2005 09:25:55
|
------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."
http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 09:31:32
|
jprogrammer
Virtual Machine Man
Membro desde: 04/02/2005 13:49:20
Mensagens: 546
Offline
|
Na prova isso apesar de ser simples pode confundir um pouco.
MVC e FrontController.
A arquitetura que tem o controller principal é o MVC.
Cada unidade de processamento seria o FrontController neste caso.
EDITADO:
jprogrammer wrote:
Agora se sua servlet contém lógica de negócios é melhor deixar tudo m um único controler desde de que essa lógica esteja relacionada com a mesma tarefa.
Aqui em cima escrevi errado, queria escrever frontcontroller
This message was edited 1 time. Last update was at 06/05/2005 09:40:14
|
O bom menino !!! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 09:40:29
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Kina.. eu costumo utilizar a estratégia front-controller e command!
Então fica assim:
view- --> FrontController --> Command --> negocio --> persistencia
Você pode também criar uma fábrica de commands para facilitar sua vida!
No meu caso, meu frontcontroller recebe a requisição, pega um atributo chamado op (operação), e de acordo com o valor deste atrributo eu sei qual é a operação que ele irá realizar! Então é só vc chamar um command apropriado para executar aquela função. O command por sua vez, executa todo o processamente relacionada a esta operação, e retorna para o frontController o resultado, que no meu caso, é a página que o frontcontroller deverá redirecionar!
O FrontController é um servlet, mas o command é uma classe normal, que não estende servlet. Não sei se é uma boa prática, mas meus commands receber o HttpRequest e o HttpResponse em um método chamado execute!
Tirei este exemplo do livro Core J2ee patterns!
Abraços!
Thiago
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 09:43:31
|
Rafael Nunes
Moderador
![[Avatar]](/images/avatar/d072677d210ac4c03ba046120f0802ec.png)
Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline
|
Thiago Senna wrote:
Você pode também criar uma fábrica de commands para facilitar sua vida!
No meu caso, meu frontcontroller recebe a requisição, pega um atributo chamado op (operação), e de acordo com o valor deste atrributo eu sei qual é a operação que ele irá realizar! Então é só vc chamar um command apropriado para executar aquela função. O command por sua vez, executa todo o processamente relacionada a esta operação, e retorna para o frontController o resultado, que no meu caso, é a página que o frontcontroller deverá redirecionar!
Você tem um FrontController único que recebe o parâmetro 'op' e dispacha para o Command apropriado?
This message was edited 1 time. Last update was at 06/05/2005 09:45:03
|
------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."
http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 09:44:08
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Exatamente!!! Eu meu sistema inteiro eu tenho um único Controle!
This message was edited 1 time. Last update was at 06/05/2005 09:44:42
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 09:52:19
|
Rafael Nunes
Moderador
![[Avatar]](/images/avatar/d072677d210ac4c03ba046120f0802ec.png)
Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline
|
Então você não tem um FrontController, você tem um Controller. FrontController seria específico de cada serviço.
[edit]Se bem que na documentação, diz que você pode ter mais de um controller, nãoq ue você deva ter. Sendo assim, não vejo a diferença entre um MVC e um FrontController com um único controller
|
------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."
http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 09:56:14
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Rafael!
Esse diagrama que você colocou em cima é uma Herança!
Isso quer dizer que o ServletFront ou o JSPFront herdam características do controle!
Vc pode ou usar JSP como camada de controle(não recomendado) ou uma Servlet!
No meu caso, eu não criei uma interface ou classe abstrata com o nome Controle, mas é uma estratégia interessante também.
Também não há problemas em ter mais de um FrontController. Mas eu pessoalmente prefiro um único controle!!!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 10:06:28
|
Rafael Nunes
Moderador
![[Avatar]](/images/avatar/d072677d210ac4c03ba046120f0802ec.png)
Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline
|
E qual a diferença entre um MVC e um FrontController com um único Controller?
|
------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."
http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 10:14:48
|
jprogrammer
Virtual Machine Man
Membro desde: 04/02/2005 13:49:20
Mensagens: 546
Offline
|
Pelo que vi um MVC se caracteriza por ter vários views diferentes para o mesmo seviço.
EDITADO:
Como o Thiago disse não precisa ser um ambiente web.
Eu entendi essa como a principal diferença.
Agora o Thiago colocou uma coisa super importante:
Thiago Senna wrote:
O FrontController é um servlet, mas o command é uma classe normal, que não estende servlet. Não sei se é uma boa prática, mas meus commands receber o HttpRequest e o HttpResponse em um método chamado execute!
Deixar o controller desacoplado do ambiente web o maior possivel, pois se uma dia precisar mudar para desktop ou outra coisa será bem mais fácil.
Agora JSP como controller fica muito ruim.
Código java no JSP vira uma meleca...
This message was edited 2 times. Last update was at 06/05/2005 10:22:49
|
O bom menino !!! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 10:18:07
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Naum entendi o motivo da pergunta! Mas vamos lá!
MVC é uma arquitetura que separa modelo (objetos de negócio), visualização (view) e o controle (operações solicitadas pelo usuário).
Não há igualdade ou diferença dentre FrontController e MVC. O FrontController só é um pattern que você utiliza dentro do MVC para implementar a camada de Controle! Ou seja, FrontController é um pattern, e ele por si só não é MVC.
Imagine também que é possível usar MVC em uma aplicação Swing. Daí eu te pergunto. É possível usasr um servlet como controle em uma aplicação Swing? Bom.. talvez até dê.. mas é uma verdadeira gambiarra!
Isso só demonstra que existem várias maneiras de você implementar sua camada de controle e ainda atender o padrão MVC.
No livro core j2ee paterns, você perceberá que existe mais de uma estratégia para se implementar a camada de controle. Existe um que o livro aborda com mais profundidade (não sei qual é) e um uma outra estratégia que eles falam bém brevemente, que é o command and controller!
E é exatamente a estratégia Command and Controller que adotei para o sistema que estou desenvolvendo.
Observe que a camada de controle vai além de um FrontController. A camada de controle na verdade é o FrontController junto com todos os commands que realizam as operações solicitadas pelo usuário. Isso tudo junto é a camada de controle! Como eu uso commands, não há motivo de sair criando servlets e outros Fronts controllers, basta receber a requisição do usuário e encaminhá-lo para o command.
Abraços!
Thiago
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2005 10:27:58
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
JProgrammer wrote: Agora o Thiago colocou uma coisa super importante:
Thiago Senna wrote:
O FrontController é um servlet, mas o command é uma classe normal, que não estende servlet. Não sei se é uma boa prática, mas meus commands receber o HttpRequest e o HttpResponse em um método chamado execute!
Deixar o controller desacoplado do ambiente web o maior possivel, pois se uma dia precisar mudar para desktop ou outra coisa será bem mais fácil.
Concordo JProgrammer. Com esssa colocação que você fez já tira uma dúvida minha. Como meu command recebeo request e o response por parâmetro, então seria difícil reaproveitar estes commands fora da aplicação web. Ou seja, seria interessante bolar uma estratégia na qual o command não precise receber o request e o response, daí sim estariamos mais próximo de reaproveitar os commands em uma aplicação desktop por exemplo!
Abraços!
Thiago
|
|
|
 |
|
|