Esse artigo é continuação do
TUTORIAL JAVA + FLEX NA PRÁTICA 1/6
TUTORIAL JAVA + FLEX NA PRÁTICA 2/6
TUTORIAL JAVA + FLEX NA PRÁTICA 3/6
TUTORIAL JAVA + FLEX NA PRÁTICA 4/6
Como tenho feito nos outros artigos que fazem parte deste tutorial vou colocar o projeto para vocês não se perderem

EVENTS
Eventos é forma que encontramos de criar uma comunicação entre Objetos que não tem ou não podem se comunicar de uma forma direta. Algumas coisas são muito bonito falar porém é muito Simples fazer, um exemplo típico são os eventos customizados em flex, como o tutorial é NA PRÁTICA vamos ao código:
EstadoEvent.as
ACTIONSCRIPT:
-
package com.saberprogramar.events
-
{
-
import flash.events.Event;
-
-
public class EstadoEvent extends Event
-
{
-
-
public static const SAVE:String = "saveEstado";
-
public static const REMOVE:String = "removeEstado";
-
-
-
public function EstadoEvent(type:String)
-
{
-
super(type);
-
}
-
-
-
}
-
}
Os eventos são muito utilizados no Flex e recomendo por todos que procuram um código limpo, como você consegue perceber declaro variáveis Static com o nome de "SAVE" e "REMOVE", neste caso representa os métodos que será necessário disparar eventos, a necessidade de ter esses eventos no nosso caso de um MVC é que a Controller ele não pode mudar um status na view, isso é responsabilidade da própria view, por isso a necessidade de ter eventos. A view fica a escuta deste evento, então quando a controller dispara esse evento a própria view muda o seu status.
Para criar um evento customizado é só criar uma sub-classe da Classe "Event", na construtora da nossa classe recebemos como parâmetro uma String, que no caso é uma das nossas variáveis que declaramos como static na mesma classe (Mais a frente você verá a utilização da nossa classe e vai entender mais).
CONTROLLER
Agora vamos falar da C(Controller) do nosso MVC, essa parte é a melhor de todas, Aliás é a parte da implementação do MVC mais importante.
A Controller recebe requisições da View e passa para Model e o mesmo acontece no sentido contrário, além disso a Controller dispara os eventos que acabamos de criar no ínicio deste tutorial.
Se você analisar a figura acima vai perceber que existem duas classes na nossa Controller uma interface e a implementação da mesma, vamos ao código:
IEstadoController.as
ACTIONSCRIPT:
-
package com.saberprogramar.controllers
-
{
-
import com.saberprogramar.models.entitys.Estado;
-
-
import mx.collections.ArrayCollection;
-
-
public interface IEstadoController
-
{
-
-
function get estadoList():ArrayCollection;
-
-
function findAll():void;
-
-
function findByName(nome:String):void;
-
-
function save(estado:Estado):void;
-
-
function remove(estado:Estado):void;
-
-
}
-
}
Uma simples interface sem muitas explicações que é implementada pela:
EstadoController.as
ACTIONSCRIPT:
-
package com.saberprogramar.controllers
-
{
-
import com.saberprogramar.events.EstadoEvent;
-
import com.saberprogramar.models.delegates.EstadoDelegate;
-
import com.saberprogramar.models.entitys.Estado;
-
-
import mx.collections.ArrayCollection;
-
import mx.controls.Alert;
-
import mx.rpc.events.FaultEvent;
-
import mx.rpc.events.ResultEvent;
-
-
import org.swizframework.Swiz;
-
import org.swizframework.controller.AbstractController;
-
-
public class EstadoController extends AbstractController
-
implements IEstadoController{
-
-
[Bindable]
-
public var estadoList:ArrayCollection;
-
-
[Autowire(bean="estadoDelegate")]
-
public var estadoDelegate:EstadoDelegate;
-
-
public function EstadoController()
-
{
-
super();
-
}
-
-
public function findAll():void{
-
executeServiceCall(estadoDelegate.findAll(),onFindAll,onError);
-
}
-
-
public function findByName(nome:String):void{
-
executeServiceCall(estadoDelegate.findByName(nome),onFindByName,onError);
-
}
-
-
public function save(estado:Estado):void{
-
executeServiceCall(estadoDelegate.save(estado),onSave,onError);
-
}
-
-
public function remove(estado:Estado):void{
-
executeServiceCall(estadoDelegate.remove(estado),onRemove,onError);
-
}
-
-
//*************** Handle Results ************************//
-
-
public function onFindAll(event:ResultEvent):void{
-
estadoList = ArrayCollection(event.result);
-
}
-
-
public function onFindByName(event:ResultEvent):void{
-
estadoList = event.result as ArrayCollection;
-
}
-
-
public function onSave(event:ResultEvent):void{
-
Swiz.dispatchEvent(new EstadoEvent(EstadoEvent.SAVE));
-
}
-
-
public function onRemove(event:ResultEvent):void{
-
Swiz.dispatchEvent(new EstadoEvent(EstadoEvent.REMOVE));
-
}
-
-
private function onError(event:FaultEvent):void{
-
Alert.show(event.fault.message,"ERROR");
-
}
-
-
-
-
-
}
-
}
Vamos a algumas explicações:
AbastractController -> uma classe que faz parte do Framework Swiz, ao estendermos esta classe além de ter a mesma funcionalidade que ganhamos no caso do Delegate podemos usar um método que facilita e muito a forma de tratar as funções, o método executeServiceCall.
executeServiceCall - > recebe como parâmetro um método, o nossa função que vai receber o retorno em caso de sucesso e a nossa função que vai receber o retorno no caso de algum erro.
Na linha abaixo adicionamos uma escuta para nosso bean criado no Bean.mxml chamado de estadoDelegate que mapea e instancia a nossa classe já criada e explicada EstadoDelegate.
ACTIONSCRIPT:
-
[Autowire(bean="estadoDelegate")]
-
public var estadoDelegate:EstadoDelegate;
//*************** Handle Results ************************//
Desta linha para baixo estão todas as nossas funções que trata o retorno que vem do nosso Delegate, pode perceber no caso onSave e OnRemove eu disparo o Nosso Evento Criado no ínicio deste artigo pelo framework Swiz e não pelo dispatchEvent do SDK padrão do Flex(Flash), esse disparo de Evento é necessário para que a view saiba que ocorreu tudo certo e mude o seu “status” atual.
OK, na próxima parte vamos mostrar a View feita em Flex, a view que vai ser responsável por “consumir”(se comunicar) com o nosso Controller.
Espero o feedback de vocês galera, se está bom, ruim, péssimo. Podem ficar a vontade para comentar no blog e se gostarem divulgar, o intuito é ajudar quem quer usar um MVC no Flex, espero está ajudando alguém
Vlw e até a próx.