Separacao entre view e controller no MVC...  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
nicholas.bittencourt
JavaTeenager
[Avatar]

Membro desde: 17/01/2007 00:17:42
Mensagens: 161
Localização: Niterói, RJ, Brasil
Offline

Estava discutindo hoje no trabalho sobre a separação entre as camadas de controle e apresentação no MVC. Pela proposta da arquitetura, eu poderia alterar completamente a camada de apresentação sem que isso fosse impactar na minha camada de controle afinal, tudo que ela veria seriam requests e responses. Na minha idéia, eu poderia criar uma camada de apresentação em PHP, Flex ou qualquer outra linguagem/framework enquando usaria meu framework de preferencia na camada de controle. Ai surgiram as minhas dúvidas...

Hoje umas das referências que temos em frameworks MVC são o Struts e o JSF. Mas nenhum dos dois permite que eu desacople totalmente as minhas camadas. O Struts ainda é mais flexível no que se trata da resposta a camada de apresentação pois faz o redirecionamento e posso passar os parâmetros pelo request para a página. Mas o JSF amarra completamente as duas coisas! Se eu não declaro um f:view no meu JSP (só posso usar JSP), o Servlet não funciona! Isso não está errado? Eu sou obrigado a usar os componentes X e Y na apresentação só porque adotei um framework na camada de controle?

Eu não cheguei a estudar mais a fundo... Mas como outros frameworks como o VRaptor ou o Menta se comportam nessa situação? Posso fazer a passagem de informações sem problemas?

--
Nicholas Dacal A. Bittencourt
http://goronah.blog.br

We also realized that solving everyone?s problems was too big of a challenge for the first release. It would be better to build a product that a lot of people love, than one that everyone tolerates (...) - Paul Buchheit, Gmail Engineer
[WWW] [MSN]
du123
JavaChild

Membro desde: 27/11/2006 11:19:22
Mensagens: 127
Offline

A qual acoplamento voce se refere? ActionForms do Struts, por exemplo?

Keep studying, little grasshopper... =)
nicholas.bittencourt
JavaTeenager
[Avatar]

Membro desde: 17/01/2007 00:17:42
Mensagens: 161
Localização: Niterói, RJ, Brasil
Offline

Como disse, o Struts é mais tranquilo pois não me trava em nada na página! Posso usar o ActionForm só para receber os parametros do request e a volta para a página eu faço totalmente através de atributos. É trabalhoso, eu sei, mas não me obriga a usar o FW na apresentação. Já o JSF é um porre, pois sem a apresentação ser modelada para o JSF eu não consigo usar a camada de controle.

--
Nicholas Dacal A. Bittencourt
http://goronah.blog.br

We also realized that solving everyone?s problems was too big of a challenge for the first release. It would be better to build a product that a lot of people love, than one that everyone tolerates (...) - Paul Buchheit, Gmail Engineer
[WWW] [MSN]
du123
JavaChild

Membro desde: 27/11/2006 11:19:22
Mensagens: 127
Offline

Isso é um mal de qualquer framework que se utilize de taglibs especificas, né?

Sem muitas solucoes para você... hehehehe =)

Keep studying, little grasshopper... =)
TucaZ
Thread.start()
[Avatar]

Membro desde: 13/09/2003 02:26:09
Mensagens: 37
Offline

Acredito que quando falamos de MVC utilizando frameworks, independente da tecnologia ficamos presos a ela de alguma forma. Conseguimos obter flexibilidade e facilidade de extensão, mas dentro da própria tecnologia.

Para atingir esse nível de indenpendencia que você sugere a abordagem mais adequada seria trabalhar com serviços utilizando formatos de comunicação independentes de tecnologia tais como HttpRequest, XML ou JSon.

http://blog.tucaz.net
[Email] [WWW]
Emerson Macedo
Virtual Machine Man
[Avatar]

Membro desde: 01/08/2006 16:55:28
Mensagens: 689
Localização: Rio de Janeiro - RJ
Offline

Na verdade o que falta pro seu caso é definir de forma adequada uma camada de aplicação com uma interface que possa ser usada por qualquer camada de apresentação que você necessite criar. Mas cuidado par (1) não criar uma coisa desnecessária para seu caso, fazendo com isso BDUF e (2) acho que você confundiu um pouco MVC e camadas que são coisas diferentes.


Emerson Macedo Leite
PMP - Ping-pong Master Player
CSM - Counter-Strile Manager
http://codificando.com

"Porque, assim como o relâmpago sai do oriente e se mostra até o ocidente, assim será também a vinda do filho do homem." - Mateus 24:27
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
Leonardo3001
GUJ Ranger

Membro desde: 04/07/2007 18:28:58
Mensagens: 975
Offline

Não existe separação entre view e controller! No padrão original, controller mantém referências da view e do model, view mantém referências do model (mesmo que transitivamente), e model não mantém referências para ninguém.

Portanto, sempre que você faz uma view nova, você faz um controller novo. Sem mistério.

Mas se há a necessidade de reaproveitar controller entre views diferentes, isso só pode significar uma coisa: POG! Muito provavelmente, seu controller está muito grande e está fazendo mais coisas que deveria fazer. Mova parte da lógica do controller para os models, e faça o controller ficar pequeno. Assim, você não fica com dó na hora de reescrever uma view diferente.

Leonardo Veríssimo
-------------------------------------------------
Objectzilla
[WWW]
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

Leonardo3001 wrote:Não existe separação entre view e controller! No padrão original, controller mantém referências da view e do model, view mantém referências do model (mesmo que transitivamente), e model não mantém referências para ninguém.

Portanto, sempre que você faz uma view nova, você faz um controller novo. Sem mistério.

Mas se há a necessidade de reaproveitar controller entre views diferentes, isso só pode significar uma coisa: POG! Muito provavelmente, seu controller está muito grande e está fazendo mais coisas que deveria fazer. Mova parte da lógica do controller para os models, e faça o controller ficar pequeno. Assim, você não fica com dó na hora de reescrever uma view diferente.
Concordo com o Leonardo. Alguém poderia dar um exemplo de visão e controle totalmente desacoplados?

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2654
Localização: Chicago, EUA
Offline

A camada view, seja ela JSP, velocity, JSTL, etc. exige programação, isto é, exige lógica. Não tem como fugir disso.

O que vc pode e deve fazer é ABSTRAIR o máximo possível essa lógica para fora da camada view.

NO JSP isso é feito através de TAGs. Por isso que é fundamental um conjunto de tags bem integradas com o framework e uma facilidade grande para vc criar suas próprias tags de visão, loop e condição.

E não, JSTL está bastante longe do ideal, por ser muito genérica, verbose e cheia de pentelhações...

This message was edited 2 times. Last update was at 26/08/2008 15:54:39


Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team