Padrão MVVM com Java

Pessoal, está começando a surgir algumas abordagens sobre o uso do MVVM com java, já temos alguns frameworks como o ZK que já utilizam este padrão como base.

O problema é que é um padrão proveniente da Microsoft voltado para aplicações WPF e Silverlight, o java já possui ‘N’ conceitos e frameworks consagrados, não sei como este padrão pode se comportar numa aplicação em java.

Poderiam me ajudar nessa visão através de comentarios ou relato de experiências?

Obrigado galera !!

[quote=fmy_1]Pessoal, está começando asurgir algumas abordagens sobre o uso do MVVM com java, já temos alguns frameworks como o ZK que já utilizam este padrão como base.

O problema é que é um padrão proveniente da Microsoft voltado para aplicações WPF e Silverlight, o java já possui ‘N’ conceitos e frameworks consagrados, não sei como este padrão pode se comportar numa aplicação em java.

Poderiam me ajudar nessa visão através de comentarios ou relato de experiências?

Obrigado galera !![/quote]
O mais proximo seria usar o padrão MVP, é o mesmo conceito mas MVVM é moldado para essas tecnologias Microsoft.

[quote=fmy_1]Pessoal, está começando a surgir algumas abordagens sobre o uso do MVVM com java, já temos alguns frameworks como o ZK que já utilizam este padrão como base.

O problema é que é um padrão proveniente da Microsoft voltado para aplicações WPF e Silverlight, o java já possui ‘N’ conceitos e frameworks consagrados, não sei como este padrão pode se comportar numa aplicação em java.

Poderiam me ajudar nessa visão através de comentarios ou relato de experiências?

Obrigado galera !![/quote]

O MVVM não é um padrão da microsoft. Nenhum padrão é de um empresa ou tecnologia, um padrão é universal ( ou não é um padrão). A prova é que o ZK ( que é java) usa o mesmo padrão.

O MVVM não é igual ao MVP. O MVVM implica no conceito de Binding e de um objeto que faz o binding. O pessoal do ZK chama o padrão de MVB (Model-View-Binder) que eu acho um nome muito melhor ( mas o padrão é o mesmo).

A ideia é que os controles são definidos por uma coisa chamada a view. Isto é um arquivo , normalmente algum tipo de XML que o runtime interpreta para um conjunto de objeto.
O Binder lê este arquivo e processa os binds necessários. quer sejam de dados, eventos, etc… Ele faz isso olha um outro arquivo ( que no MVVM é chamado de View-Model) que é normalmente código. então , quando o sistema corre, o usuário interage com os controles que foram criados através do arquivo xml ( que é a view) e o binder faz com que as ações do usuário tenham efeito a nível do código que foi escrito no VM.

O padrão em si é necessário quando queremos usar o mecanismo de bind que não existe no MVP nem no MVC. É isto que diferencia.

O MVP pode ser composto como o MVVM para prover um design mais desacoplado ainda e é essa a proposta da Microsoft. O Asp.net webforms é montado para seguir o padrão MVVM onde o code-beind é linkado à view através do binder. Dai para a frente é com o padrão MVP em que o VM do MVVM faz agora o papel de View do MVP. O MVVM é um padrão puramente “mecânico” de amarar as coisas de forma a que os eventos e os dados fluam pela tela com mínimo de esforço do programador. O MVVM é usado pelo JSF mas de uma forma mais escondida porque o binding acontece nos internos da especificação, mas o ManagedBean faz o papel do VM (equivalente ao code-beind) e o arquivo de xml do jsf faz o papel do aspx. Mas no jsf vc tem que ser mais explicito de o quê liga com o quê, assim como no ZK. O Java FX também segue o mesmo padrão, mas ele difarça melhor por causa do conceito de Property ( que o Vaadin tb usa) e o fato de não usar xml para definir a view. Mas o binder está atuando por meio do objeto Property.

Não ha nenhum problema no MVVM ser usado em Java. Ele é necessário para frameworks orientados a componentes onde o binding é a forma mais eficaz de ligar seu código aos componentes, pois vc não tem acesso ao código dos componentes).
O nome do MVVM é muito ruim ( porque o pessoa da microsoft tem tendencia a complicar ) e o nome MVB explica melhor o conceito, contudo, o conceito em si, é útil e necessário em qualquer tecnologia.

Gostei muito da explicação. Então quer dizer que se eu usar, por exemplo, o framework Extjs eu teria que usar o MVVM?