TUTORIAL JAVA + FLEX NA PRÁTICA 5/6

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

package crudFlex TUTORIAL JAVA + FLEX NA PRÁTICA 5/6

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:
  1. package com.saberprogramar.events
  2. {
  3. import flash.events.Event;
  4.  
  5. public class EstadoEvent extends Event
  6. {
  7.  
  8. public static const SAVE:String = "saveEstado";
  9. public static const REMOVE:String = "removeEstado";
  10.  
  11. public function EstadoEvent(type:String)
  12. {
  13. super(type);
  14. }
  15.  
  16. }
  17. }

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:
  1. package com.saberprogramar.controllers
  2. {
  3. import com.saberprogramar.models.entitys.Estado;
  4.  
  5. import mx.collections.ArrayCollection;
  6.  
  7. public interface IEstadoController
  8. {
  9.  
  10. function get estadoList():ArrayCollection;
  11.  
  12. function findAll():void;
  13.  
  14. function findByName(nome:String):void;
  15.  
  16. function save(estado:Estado):void;
  17.  
  18. function remove(estado:Estado):void;
  19.  
  20. }
  21. }

Uma simples interface sem muitas explicações que é implementada pela:

EstadoController.as

ACTIONSCRIPT:
  1. package com.saberprogramar.controllers
  2. {
  3. import com.saberprogramar.events.EstadoEvent;
  4. import com.saberprogramar.models.delegates.EstadoDelegate;
  5. import com.saberprogramar.models.entitys.Estado;
  6.  
  7. import mx.collections.ArrayCollection;
  8. import mx.controls.Alert;
  9. import mx.rpc.events.FaultEvent;
  10. import mx.rpc.events.ResultEvent;
  11.  
  12. import org.swizframework.Swiz;
  13. import org.swizframework.controller.AbstractController;
  14.  
  15. public class EstadoController extends AbstractController
  16. implements IEstadoController{
  17.  
  18. [Bindable]
  19. public var estadoList:ArrayCollection;
  20.  
  21. [Autowire(bean="estadoDelegate")]
  22. public var estadoDelegate:EstadoDelegate;
  23.  
  24. public function EstadoController()
  25. {
  26. super();
  27. }
  28.  
  29. public function findAll():void{
  30. executeServiceCall(estadoDelegate.findAll(),onFindAll,onError);
  31. }
  32.  
  33. public function findByName(nome:String):void{
  34. executeServiceCall(estadoDelegate.findByName(nome),onFindByName,onError);
  35. }
  36.  
  37. public function save(estado:Estado):void{
  38. executeServiceCall(estadoDelegate.save(estado),onSave,onError);
  39. }
  40.  
  41. public function remove(estado:Estado):void{
  42. executeServiceCall(estadoDelegate.remove(estado),onRemove,onError);
  43. }
  44.  
  45. //*************** Handle Results ************************//
  46.  
  47. public function onFindAll(event:ResultEvent):void{
  48. estadoList = ArrayCollection(event.result);
  49. }
  50.  
  51. public function onFindByName(event:ResultEvent):void{
  52. estadoList = event.result as ArrayCollection;
  53. }
  54.  
  55. public function onSave(event:ResultEvent):void{
  56. Swiz.dispatchEvent(new EstadoEvent(EstadoEvent.SAVE));
  57. }
  58.  
  59. public function onRemove(event:ResultEvent):void{
  60. Swiz.dispatchEvent(new EstadoEvent(EstadoEvent.REMOVE));
  61. }
  62.  
  63. private function onError(event:FaultEvent):void{
  64. Alert.show(event.fault.message,"ERROR");
  65. }
  66.  
  67. }
  68. }

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:
  1. [Autowire(bean="estadoDelegate")]
  2. 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 icon wink TUTORIAL JAVA + FLEX NA PRÁTICA 5/6

Vlw e até a próx.

{lang: 'pt-BR'}

You can leave a response, or trackback from your own site.
Subscribe to RSS Feed Follow me on Twitter!