Model Presentation e Flex Spark

Boas pessoal;

Estou utlizando java e flex, porém estou com uma pequena duvida em relação as camadas que devo utilizar.
Atualmente faço uso de controller, delegate, event e view;

Na view fica todos os meus componentes relativos a parte gráfico, e se por acaso tiver um componente que tenha muita lógica de utilização(actionscrip) eu crio um novo componente chamando ViewXImpl, com o intuito de separar o mxml do as;

As ações são feitas através de eventos que são enviados para o controller, esse por sua vez processa-os e se necessário encaminha para o delegate que encaminha para o java;

O problema que estava encontrando é que em algumas situações o controller estava ficando muito grande, pois possuia todas as funções especificas de cada view, dificultando a manutenção e o entendimento do código.

A dica que me deram foi adicionar uma camada model presentation e eleminar o delegate. Deixando o controler mais genérico o possivel para tratar eventos e requisições para o banco.

A minha duvida é como realmente implementar um model presentation nesta minha estrutura, ela deve estar intimamente acoplada com uma unica view? Mais ai seria basicamente uma ViewImpl. Ou o correto seria um model presentation para views que trabalham num mesmo contexto?

Sendo mais prático, um arraycollection que é utilizado por varias views, atualmente eu o armazeno no controller, com essa nova estrura onde ficaria?

Cara, com o data binding bidirecional do Flex, fica fácil usar o presentation model.

Vamos a um exemplo:

ClienteLayout.mxml
Comtém todos os componentes.

ClienteView.as
Classe filha do View.mxml
Trata ações como redimensionar telas, controlas componentes, etc.

ClientePM.as
contém atributos que contém as informações dos componentes.
Por exemplo: vc quer ter os contatos de um cliente, então vc terá um combobox no ClienteLayout, e o dataProvider dele será clientePM.contatos, que será um array collection

Entao toda vez que algum objeto for adicionado nesse contatos, seu combo tbm será atualizado.

Pra melhor entendimento, olhe isso:

Olá j0nny. Primeiramente muito obrigado por responder ao tópico e esclarecer algumas duvidas.

Na pagina 24 desse slide tem uma frase assim: “Se cada Presentation Model representa UMA abstração de UMA view(…)”

Como ficaria se por acaso eu tivesse uma outra view que utilizasse este mesmo arraycollection? Teria que trabalhar com eles de maneira duplicada mesmo que sejam os mesmos dados? Ou poderia fazer UMA Presentation Model para duas view? mas dai não estaria de acordo com o conceito de model presentation?

Eu vi que no mesmo slide ele fala sobre a utilização de uma classe base abstrata para PM’s. Só que acredito que essa classe base é para agregar funções que são utilizadas por todas as outras PM’s e como fica funções que são usada por apenas alguma minoria?

[quote=Ygor]Olá j0nny. Primeiramente muito obrigado por responder ao tópico e esclarecer algumas duvidas.

Na pagina 24 desse slide tem uma frase assim: “Se cada Presentation Model representa UMA abstração de UMA view(…)”

Como ficaria se por acaso eu tivesse uma outra view que utilizasse este mesmo arraycollection? Teria que trabalhar com eles de maneira duplicada mesmo que sejam os mesmos dados? Ou poderia fazer UMA Presentation Model para duas view? mas dai não estaria de acordo com o conceito de model presentation?

Eu vi que no mesmo slide ele fala sobre a utilização de uma classe base abstrata para PM’s. Só que acredito que essa classe base é para agregar funções que são utilizadas por todas as outras PM’s e como fica funções que são usada por apenas alguma minoria?[/quote]

Bom, se vc ver que tem algumas funções que vão se repetir, acho legal ter uma classe base.

Sobre duas views terem o msm PM, se não der pra resolver com states, não vejo outra forma menos ruim de fazer isso, além de usar nas duas views o mesmo PM.

Se eu tenho duas views que utilizarão o mesmo presentation model, também reaproveito o presentation model.

As vezes acontece de uma view conter outra, eu represento isso no model da mesma maneira. Um model contém outro (por composição).

Eu tenho utilizado o Spring Actionscript nas minhas aplicações, injetando os presentation model nas minhas views.

Falou.