Dúvidas de MVC que sempre ouço por aí (E que também você ouça)  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
Leonardo3001
Virtual Machine Man

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

Momento merchan.

De tempos em tempos, sempre aparece alguém perguntando alguma coisa sobre MVC. Resolvi então fazer um post sobre muitas delas que já ouvi ( http://www.objectzilla.com.br/2009/06/29/mvc-supostas-perguntas-frequentes/ ).

Entre as respostas digo que MVC não são camadas, que Controller é intimamente ligada à View, que Model deve estar desacoplada ao Model e outros conceitos mais comuns. Lógico que não dá pra cobrir tudo, por isso pensei: e vocês? Já tiveram uma sensação sobre MVC que não entrava na cabeça? Ou então: já ouviram alguém falando sobre MVC que achou errado?


Leonardo Veríssimo
-------------------------------------------------
Objectzilla
[WWW]
YvGa
JavaEvangelist

Membro desde: 07/03/2007 15:58:16
Mensagens: 318
Offline

Leonardo3001 wrote:
O MVC da Web é diferente do MVC do Desktop?
R. Sim, existem duas diferenças: 1) um Controller de Desktop recebe eventos de clique do mouse, de teclado, de botões e outros componentes; um Controller de Web recebe exclusivamente eventos de submissão. Consequência: aplicações Desktop são orientadas a eventos, enquanto aplicações Web, orientadas a fluxos. Tudo que uma aplicação web entende é uma ?stringona? com os dados de um suposto formulário (não dá pra saber se o cliente é humano ou que viu a interface gráfica) e que precisa devolver uma nova ?stringona? para o cliente que, supostamente, renderiza para algum desenho gráfico. A aplicação Desktop sabe exatamente os eventos recebidos e pode agir diferentemente para cada um deles. 2) A View de Desktop mantém sincronia constante do Model (através do pattern Observer), qualquer alteração que o usuário fizer no model através de um painel, será refletida imediatamente em outros painéis que, porventura, estejam visualizando o mesmo Model. Na Web, não existe nada disso, a partir do momento em que o usuário está diante de uma tela, essa representação do Model estará desconectada do Model real e o usuário não saberá quanto (e se) o Model mudou. O único momento de mudança é quando o usuário aperta F5, mas isso implica num evento consciente do usuário, não numa coisa automática, como as aplicações Desktop de qualidade fazem.



Pra mim está aqui a raiz do problema. O cara le que struts/jsf/sei-la-o-que-mais é um framework mvc, aí ele vai dar uma estudada em o que é mvc. Evidentemente essa "estudada" é dar uma olhada meio por cima em alguns blogs e artigos.

Esses blogs e artigos definem o que é mvc para desktop. O programador se confunde todo e no meio do caos que ele está aparece a frase, divida sua aplicacao em apresentacao, negocio e persistencia. E pronto, ta feita a confusao.

O conhecimento de um programador é como o bom senso, ninguem acha que precisa ter mais do que tem.

victorwss
Forum Spammer
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2368
Localização: São Paulo - SP
Online

A primeira vez que tive contato com o MVC foi frustrante. Principalmente porque o cara que me "ensinou", ensinou tudo errado. Na época eu simplesmente não via sentido no MVC e achava que ele era uma complicação bizarra e sem sentido. Mas hoje, sei que o que era bizarro e sem sentido era o que o cara achava (e provavelmente ainda acha) que é MVC.

Também concordo com o YvGa, mas acho que o problema é bem maior. Há muita gente por aí espalhando e postando coisas que dizem ser MVC mas são apenas uma versão distorcida e degenerada dele, tal como ocorreu com o cara que me "ensinou" isso. Esse tipo de coisa apenas causa confusão e desinformação e cria o efeito que vejo atualmente de "cada um tem uma definição diferente do que é o MVC".
Particularmente, uma coisa que odeio são os decoradores de framework que "aprendem a mexer" com struts, spring, JSF ou RoR, e que adoram abusar da sigla MVC como buzzword e a utilizá-la esbanjadoradamente mais por questão de marketing do que pelo conceito, mesmo sem saber direito o que a sigla significa. Dizem religiosamente que o seu framework preferido é a única forma correta existente de se usar o padrão MVC, e consideram uma heresia grave quem ousar discordar deles.

Eu particularmente, nunca achei uma implementação que julgasse ser plenamente correta e limpa do padrão MVC, incluindo as que eu mesmo fiz. Mas uma coisa que sei é que embora nunca tenha visto uma implementação plenamente correta e limpa, sei que existem diversas formas possíveis diferentes plenamente corretas e limpas. Incluindo algumas que não são nem o chamado MVC web e nem o chamado MVC desktop (alguém já parou para pensar que o MVC web do jeito que costuma ser definido é relativamente limitado em relação ao ajax? Eu já!)

This message was edited 2 times. Last update was at 30/06/2009 13:00:55


Victor Williams Stafusa da Silva

Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Mestrando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.

Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.

Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.


É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
[MSN]
bKn
JavaGuru

Membro desde: 07/04/2009 15:22:18
Mensagens: 288
Offline

Acho que você está meio estagnado no tempo. Definir um MVC web como algo que exclusivamente recebe eventos de submissão é nunca ter ouvido falar de web 2.0.
victorwss
Forum Spammer
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2368
Localização: São Paulo - SP
Online

bKn wrote:Acho que você está meio estagnado no tempo. Definir um MVC web como algo que exclusivamente recebe eventos de submissão é nunca ter ouvido falar de web 2.0.


Exato! E é aí que o tão chamado "modelo web MVC" começa a quebrar. Logicamente, para dar um jeito nisso a saída preferida do pessoal costuma ser a famosa gambiarra. Mas, curiosamente muitos se preocupam em definir o MVC, mas poucos se preocupam em redefinir o MVC.

Victor Williams Stafusa da Silva

Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Mestrando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.

Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.

Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.


É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
[MSN]
mochuara
Forum Spammer

Membro desde: 20/05/2009 11:21:32
Mensagens: 1308
Offline

SOA e "MVC Web" são os dois maiores fiascos tecnologicos da era Web 2.0.

Conheça clojure, a linguagem linda que circula na comunidade Lisp baseada na JVM.
fantomas
Forum Spammer
[Avatar]

Membro desde: 24/04/2008 16:10:55
Mensagens: 1342
Localização: Terra (maior parte do tempo)
Offline

mochuara, você pode falar um pouco mais sobre esta sua afirmação? Achei interessante.

flws
YvGa
JavaEvangelist

Membro desde: 07/03/2007 15:58:16
Mensagens: 318
Offline

Acho que um primeiro passo para o esclarecimento do mvc seria parar de chamar o modelo web de mvc. Ele nao tem nada a ver com a descricao originao do padrao, com seus observers e subjects e etc...
Leonardo3001
Virtual Machine Man

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

bKn wrote:Acho que você está meio estagnado no tempo. Definir um MVC web como algo que exclusivamente recebe eventos de submissão é nunca ter ouvido falar de web 2.0.


Web 2.0 é uma característica de aplicações web que tem caráter mais social. Pouco tem a ver com a tecnologia utilizada.

Talvez você esteja se referindo a AJAX. E nesse caso, pra uma aplicação extremamente ajaxificada, a arquitetura não é muito diferente de um desktop que "puxa coisas" do servidor: você tem uma aplicação Javascript que roda no cliente, e outra aplicação Java/ASP/PHP/Rails que roda no servidor. São duas aplicações onde cada uma tem seu MVC porque, como havia dito: não existe MVC distribuído. E no caso da aplicação servidor, ele exclusivamente recebe eventos de submissão, pois não dá pra saber se a origem é de um componente Ajax ou não.

Fui claro?

This message was edited 1 time. Last update was at 30/06/2009 15:19:35


Leonardo Veríssimo
-------------------------------------------------
Objectzilla
[WWW]
Leonardo3001
Virtual Machine Man

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

YvGa wrote:Acho que um primeiro passo para o esclarecimento do mvc seria parar de chamar o modelo web de mvc. Ele nao tem nada a ver com a descricao originao do padrao, com seus observers e subjects e etc...


Padrões são como receitas de bolo incompletas. Não é porque, ao fazê-lo, removi um ingrediente ou pus outro, que deixei de fazer um bolo.

No MVC original, só existe a noção de eventos. Se ela vai ser implementada com Observer ou alguma outra coisa, isso não importa.

E discordo que na web não exista MVC, ela existe sim.

Leonardo Veríssimo
-------------------------------------------------
Objectzilla
[WWW]
thimor
JavaTeenager
[Avatar]

Membro desde: 20/03/2007 17:53:08
Mensagens: 163
Localização: Natal
Offline


P. O Controller serve para controlar o sistema?
R. Não, o nome controller é que é confuso, e remete a alguns programadores o ?objeto deus? (God Object) ou o ?objeto bolha-assassina? (Blob Object). Porém, objetos deuses são anti-patterns, ou seja, soluções aparentemente ideiais para problemas recorrentes que causam mais problemas ainda. Quando vier à sua cabeça ?Controller?, pense-o como ?Input Controller? (controlador de entrada), e este ?coiso? deve fazer, estritamente, as seguintes atividades:
- ouve eventos;
- obtém os parâmetros de entrada desejados da View;
- obtém do Model um domínio (invariavelmente, este está num meio persistente);
- chama um método do domínio;
- escolhe a view a ser renderizada, fazendo ?bind? de algum domínio do Model.
Não raro, programadores pouco experientes colocam, no ?Controller?, lógicas de negócio ou tranformações de objeto para a view. Não é isso, remova esses códigos e ponham nos seus devidos lugares.


Onde você coloca o negocio nesse caso? Teriam Business Objects? Ou o negocio e a persistencias sao o model? O model não seria apenas POJOS?

Quem ensina, exercita seu conhecimento.
[MSN] [ICQ]
mochuara
Forum Spammer

Membro desde: 20/05/2009 11:21:32
Mensagens: 1308
Offline

fantomas wrote:mochuara, você pode falar um pouco mais sobre esta sua afirmação? Achei interessante.

flws


Essas eram as tecnologias que estavam na crista da onda na era da Web 2.0 mas eu percebo que há muito descontentamento com elas agora. Minha impressão é que apesar de serem coisas diferentes, elas compartilham algumas características sobre como frameworks e middlewares, enfim, plataformas são empurrados para o consumo geral como se fossem produtos ao invés de serviços.

Conheça clojure, a linguagem linda que circula na comunidade Lisp baseada na JVM.
YvGa
JavaEvangelist

Membro desde: 07/03/2007 15:58:16
Mensagens: 318
Offline

Leonardo3001 wrote:
Padrões são como receitas de bolo incompletas. Não é porque, ao fazê-lo, removi um ingrediente ou pus outro, que deixei de fazer um bolo.

No MVC original, só existe a noção de eventos. Se ela vai ser implementada com Observer ou alguma outra coisa, isso não importa.

E discordo que na web não exista MVC, ela existe sim.


Sim, existe porque resolveram dar o mesmo nome a padroes diferentes. Assim como uma torta é diferente de um bolo, embora ambos tenham a mesma funcao.
fantomas
Forum Spammer
[Avatar]

Membro desde: 24/04/2008 16:10:55
Mensagens: 1342
Localização: Terra (maior parte do tempo)
Offline

muchara wrote:Essas eram as tecnologias que estavam na crista da onda na era da Web 2.0 mas eu percebo que há muito descontentamento com elas agora. Minha impressão é que apesar de serem coisas diferentes, elas compartilham algumas características sobre como frameworks e middlewares, enfim, plataformas são empurrados para o consumo geral como se fossem produtos ao invés de serviços.


Entendi, realmente parece mesmo, não havia pensado nisto.

Valeu!

flws
YvGa
JavaEvangelist

Membro desde: 07/03/2007 15:58:16
Mensagens: 318
Offline

thimor wrote:
Onde você coloca o negocio nesse caso? Teriam Business Objects? Ou o negocio e a persistencias sao o model? O model não seria apenas POJOS?


Nao, model nao sao apenas pojos, model eh tudo o que nao eh view. Services, facades, factories, repositorios, arquivos de configuracao, datasources, database, tudo é model.

Controller eh o que a view usa para modificar o modelo. No caso da web eles sao responsaveis tambem por encontrar a view a mostrada ao usuario, em desktop nem isso.

MVC NAO é apresentacao/dominio/persistencia. Uma coisa é uma coisa, outra coisa é outra coisa. MVC é apenas uma das formas de se separar apresentacao de dominio.
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team