Usar AJAX quebra o Padrão MVC?

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!

up!

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

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

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?

[quote=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?[/quote]

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.

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?

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:

[quote=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[/quote]

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.

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.