Usar AJAX quebra o Padrão MVC?

8 respostas
Jaba

E aew pessoal.

Estive pensando: usar AJAX não quebra o MVC?

Com AJAX, estamos mandando requisições assincronas para não termos que depender da requisição sincrona que o Controller gerencia, mas aí estamos tirando o gerenciamento da requisição do Controller e deixando o mesmo na view quando usamos JQuery.
O Controller não deveria também gerenciar requisições assíncronas a invés de termos que lidarmos com esse tipo de requisição na View?

Valew!

8 Respostas

Jaba

up!

eu falei alguma besteira ou é uma questão meio chata pra se discutir?

PedroTOliveira

Não quebra Jaba.
Porquê o padrão MVC prevê a atualização da VIEW através de event calls(State Query) direto do Modelo.

Utilizando a Tecnologia WEB de hoje em dia isso só é possível com Ajax.
Ou seja, apesar de haver uma request que não é orquestrada pelo controller, o comportamento esperado é o que importa.

Um exemplo desse tipo de “ligação” entre Model e View são as ActionListeners do JSF.

Essa imagem tbm demonstra isso que expliquei:

Fonte:http://java.sun.com/blueprints/patterns/MVC-detailed.html

esmiralha

Pedro,

Não entendi como o ActionListener em JSF representaria uma ligação entre Model e View. Você está dizendo que a classe que implementa ActionListener faz parte do Model?

Não seria, nesse caso, uma ligação entre Controller e View?

PedroTOliveira

esmiralha:
Pedro,

Não entendi como o ActionListener em JSF representaria uma ligação entre Model e View. Você está dizendo que a classe que implementa ActionListener faz parte do Model?

Não seria, nesse caso, uma ligação entre Controller e View?

O Controller do JSF é centralizado, no caso o FacesController.

O ManagedBean que implementa o ActionListener faz a ligação do modelo com a view. Atualizando a VIEW de acordo com o estado do Modelo (ManagedBeans).

Por se tratar no final das contas de uma query de estado do modelo o action listener no JSF fica no final do ciclo de vida do Framework.

esmiralha

Se o Backing Bean faz parte do Model e ele implementa uma interface específica de JSF (ActionListener), isso não acoplaria o Model a uma tecnologia específica? Isso é desejável?

drigo.angelo

Saindo um pouco da discussão de frameworks, a simples utilização de AJAX, a meu ver, não quebra (nem trinca rsrsrs) o modelo mvc, desde que controle e modelo tratem as requisições de forma igual (só o que muda é que o resultado não vai afetar a página inteira).

Por exemplo, uma página jsp pode fazer quantas requisições quiser sem precisar atualizar a página (através de ajax), se um controlador receber a requisição, manipular o modelo e enviar uma resposta, nada do MVC foi desrespeitado… :stuck_out_tongue:

PedroTOliveira

drigo.angelo:
Saindo um pouco da discussão de frameworks, a simples utilização de AJAX, a meu ver, não quebra (nem trinca rsrsrs) o modelo mvc, desde que controle e modelo tratem as requisições de forma igual (só o que muda é que o resultado não vai afetar a página inteira).

Por exemplo, uma página jsp pode fazer quantas requisições quiser sem precisar atualizar a página (através de ajax), se um controlador receber a requisição, manipular o modelo e enviar uma resposta, nada do MVC foi desrespeitado… :P

Exato.
No final das contas é isso que os Frameworks Web encapsulam.
Diria que é a única forma de se ter um MVC completo em aplicações web, com atualização da View de acordo com a mudança dinâmica de estado do modelo.

PedroTOliveira

Bom,
Se você está usando JSF você precisa representar o seu modelo com essa tecnologia certo?

Se você estivesse usando swing teria que implementar o java.awt.event.ActionListener.

Independente da Camada, vc vai sempre estar representando um estado ou comportamento do seu Modelo de Domínio de alguma forma, você minimiza o acoplamento utilizando interfaces e outros recursos como REST, Injeção de dependencias e AOP.

Criado 20 de dezembro de 2010
Ultima resposta 10 de jan. de 2011
Respostas 8
Participantes 4