logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Set 25

Adobe Flex Mobile, Swiz Framework and FlexORM

Escrito por Stefan Horochovec em 1, 2.0, 4, 6, Adobe, Adobe Flex, AR, Artigo, BI, blog, C#, class, Desenvolvimento, developer, flash, Flex, Flex 4, framework, image, mg, mobile, O, on, Pessoal, Ria’s Geral, S+S, Swiz Framework, UI @ 09 25th, 2011 | via http://www.horochovec.com.br/blog | Sem comentários
Stefan Horochovec
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá pessoal!

Essa semana um artigo meu foi publicado pela Flash and Flex Developer Magazine. O artigo trata de como construir uma publicação Flex Mobile utilizando o framework Swiz e o framework FlexORM, se você tem algumas dúvidas sobre persistência e gerenciamento de aplicações Flex utilizando algum framework, convido você a ler meu artigo. A revista é eletrônica, você pode conferir o artigo clicando na imagem abaixo.

Espero que o artigo lhe ajude no desenvolvimento Flex Mobile.

Set 8

[DynamicService] Custom Metadata

Escrito por Mario Junior em 1, Adobe, Adobe Flex, AR, Beta, BI, C#, custom, Download, dynamic, Flex, for, framework, git, html, IE, O, on, Projetos, pt, Ria’s Geral, Swiz Framework, UI @ 09 8th, 2011 | via http://blog.mariojunior.com | Sem comentários
Mario Junior
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

[PT-BR]
Criei uma biblioteca q pode ser muito util para quem trabalha com projetos usando Swiz. O projeto ainda é beta, mas já coloquei no github para vcs poderem acompanhar evoluções/correções. Por favor, leiam o arquivo README (html ou RichText).

Valeu!

[EN-US]
I’ve created a simple project named [DynamicService] custom metadata for Swiz Framework (Adobe Flex) and I’ve posted on github. Let you know that’s a beta project, but you can download it. Please read the README file (html or rtf extension).

Github link: https://github.com/mariojunior/DynamicServices-Custom-Metadata

Thanks.

Jun 27

Metadata Tags customizadas com Code completion

Escrito por Willian Mano em 1, 2.0, 2009, 3d, 4, 6, Adobe, AR, Artigo, as3, BI, blog, C#, class, código, configuração, custom, Documentação, event, exemplo, flash, flash builder, Flex, Flex 3, Flex 4, fonte, for, Formação, framework, Frameworks, handle, html, int, Links, mg, O, on, Pessoal, Plugin, Projetos, pt, RIA, Ria’s Geral, S+S, SDK, string, Sun, Swiz Framework, tag, TAT, Twitter, UI, XML @ 06 27th, 2011 | via http://blog.willianmano.eti.br/ | Sem comentários
Willian Mano
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá pessoal, nesse breve artigo eu irei falar um pouco sobre as Metadata Tags.

[Importante]
A partir da versão 4.5 do flex as Metadatas customizadas não precisam ser declaradas para o compilador nos projetos Flex, o conhecido “-keep-as3-metadata”, quem trabalha com Frameworks de terceiros entende bastante isso.

Notei na nova versão do Swiz Framework que existe também uma complementação do código para metadatas personalizadas como “Inject e EventHandler”. Depois de vasculhar os fontes do Swiz Framework encontrei o arquivo metadata.xml que é o responsável pela declaração de todas essas metadatas.

Se você está criando uma biblioteca que possui suas próprias metadatas e deseja criar uma complementação do código, basta seguir os passos da documentação da própria Adobe, é bem simples.

Esse é um exemplo desse arquivo de configuração.



  
      
          
      
  

Você pode se basear pelo arquivo do próprio framework do flex. Fica na pasta: sdks4.5.0frameworksmetadata.xml

Espero que a informação tenha sido útil.

Abaixo seguem alguns links interessantes relacionados ao assunto.

  • About metadata tags
  • Metadatas Personalizadas (Flex 3 e Flex 4)
  • Code completion for custom metadata tags

Post to Twitter

Mar 29

Pattern Delegate e os Mocks

Escrito por Janderson Cardoso em Adobe Flex, Blazeds, Design Patterns, Ria’s Geral, Swiz Framework @ 03 29th, 2011 | via http://www.jandersonfc.com/ | Sem comentários
Janderson Cardoso
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »


 Pattern Delegate e os Mocks

Hoje vou falar sobre um pattern muito importante e que é muito usado no Flex(client) chamado de Delegate. Para quem nunca ouviu falar vou resumir da seguinte forma:

“Delegate é o pattern que indica a comunicação do cliente com as regras de negócio sem a necessidade do cliente conhecer as regras de negócio.”

Explicação Abstrata – Todo sistema possui suas regras de negócio, que normalmente são expostas através de serviços. o Delegate tem justamente esse papel, centralizar um local no cliente(aplicação frontend) para essa chamada ao serviço que expôe as regras de negócio do sistema. Uma coisa muito importante nesse pattern é que ele não deve conhecer as regras de negócio em si, normalmente consomem serviços mas não sabem o que realmente eles fazem.

Explicação Concreta - Em 90% dos projetos em que trabalho cujo o frontend é em Flex o backend é em Java, toda a lógica do sistema(Regras de Negócio) ficam no java. No Java possuo um Serviço que via Blazeds é disponibilizado para ser consumido no Flex. Com esse cenário costumo ter uma classe Delegate no lado do flex que consome o serviço disponibilizado pelo blazeds através de RemoteObject.

Na teoria é tudo muito funcional e faz sentido, porém na prática sempre existe a dúvida se realmente vale a pena ter mais esse nível de conceito e organização no flex, então vou colocar 2 pontos positivos para estimular essa boa prática:

Definição de uma padrão na comunicação com backend – a partir de hoje quando você analisar um código em flex que possui um classe com parte do seu nome Delegate você terá a certeza que toda a comunicação com o backend se encontra ali, não precisa que ninguém te mostre ou que desenhe pra você icon smile Pattern Delegate e os Mocks

Grande Facilidade para usar os Mocks – Outro ponto positivo que está diretamente ligado a minha opinião é o uso de Mocks, para quem não sabe o que é Mocks precisa de um tapa na orelha..rs brincadeira icon razz Pattern Delegate e os Mocks . Mocks são dados que são gerados de forma “falsa” para testar ou simular uma parte de um sistema, normalmente uso muito no flex para simular uma chamada ao serviço do backend, isso é bom porque não preciso de um servidor rodando para testar(me refiro a teste funcional) se o client(flex) está funcionando corretamente.

Vou terminar com 2 exemplos práticos de como o uso do Delegate me ajudou a padronizar meu projetos e a usar os mocks:

Flex 4 + Swiz – neste Tutorial Básico Swiz Framework 1.0 uso o conceito de Delegate como pode ser analisado nesse pacote e Também os Mocks(no caso dos Mocks uso o utilitário do próprio swiz para criar mocks) que é justamente a classe ContactDelegateFake.as.

Flex 4 + Springas – neste Tutorial Spring ActionScript uso o conceito de Delegate como pode ser analisado nesse pacote e também os Mocks(No caso dos Mocks uso o utilitário do springas para criar mocks) que é justamente a classe ContactDelegateFake.as.

Em ambos os casos acima na controller(que é onde fica a classe que faz referência ao delegate) é feito apenas referência a uma interface IContactDelegate, então fica fácil mudar de mock para o Delegate que realmente invoca o backend, se a comunicação com backend já fosse feita no controller essa mudança de mock para o real ficaria muito mais difícil.

Bem, bons estudos e espero ter justificado o porque que em meus exemplos aqui no blog costumo usar o pattern delegate icon wink Pattern Delegate e os Mocks

Cumps.


 Pattern Delegate e os Mocks

Similar Posts:

  • TUTORIAL JAVA + FLEX NA PRÁTICA 4/6
  • Swiz não é mais Framework MVC!
  • MVC da teoria para a prática
  • Tutorial Spring ActionScript
  • TUTORIAL JAVA + FLEX NA PRÁTICA 5/6

Fev 27

Melhores práticas com Flex, PHP, Zend e Swiz

Escrito por Daniel Schmitz em 1, 2009, 4, 6, action, Actionscript, Adobe, AMF, amfphp, app, AR, Artigo, Artigos, auto, back, BI, botão, bug, busca, class, classe, classes, cliente, código, código fonte, Componente, Componentes, comunidade, configuração, control, Controls, Curso, Cursos, dados, Debug, demo, Desenvolvimento, dispatch, Diversos, Download, dynamic, Eclipse, email, err, erro, event, EventListener, Evento, Eventos, events, exemplo, falha, flash, flash builder, Flex, fonte, for, Formulário, Formulários, framework, function, handle, html, ide, IE, if, image, int, Java, labs, library, lista, Livro, Livros, LOB, Melhores Práticas, menu, mg, mvc, MXML, NaN, O, on, padrão, Pessoal, PHP, processo, procura, Projetos, pt, Remoting, RIA, Ria’s Geral, SDK, server, servidor, spark, string, Sun, swf, Swiz Framework, tag, Tech, Tecnologia, Tema, Teste, Twitter, UI, uint, utils, web, XML, XP, zend, Zend Framework @ 02 27th, 2011 | via http://flex.etc.br | Sem comentários
Daniel Schmitz
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Durante o ando de 2010 diversos leitores me escreveram solicitando alguma forma de “receita de bolo” para a criação de projetos em Flex. Estavam buscando uma maneira de criar uma aplicação de forma que fosse mais correta e mais fácil, baseada em padrões de projeto e definida através de uma estrutura que facilitasse o desenvolvimento.

No início de 2011 comecei a pensar mais no assunto, pois irei implementar estas regras nos próximos livros, chegando a uma série de “regras” das quais estarei apresentando neste artigo. Inicialmente, queria dizer que eu não sou o dono da verdade, e estou longe de criar alguma regra que se não usada irá causar o seu insucesso. Estou disposto a receber críticas que sejam construtivas, com o intuito de melhorar o sistema cada vez mais, possibilitando assim que a comunidade tenha em mãos um bom documento para consulta.

PHP ou Java?

Uma das perguntas que mais recebi ao longo de 2010, por isso estarei discutindo um pouco sobre qual linguagem de servidor usar. Inicialmente você deve saber que não é a linguagem que vai fazer você ter sucesso ou não em um sistema, e sim o quanto você conhece a mesma. Por exemplo, se você conhece muito bem PHP, porque aventurar-se em Java se dá conta do recado? O mesmo vale para o Java, mas não recebi emails de nenhum programador Java querendo mudar para php… (sic.. hehe).

O que? é fato nesta “briguinha” é que, não existe melhor ou pior. Java é mais complexo que php, exige mais atenção mas traz muitos benefícios, até financeiros (sim você ganha mais). PHP é mais fácil, você cria tudo mais rápido e com isso fica mais feliz :) Qual você vai escolher? Escolha a que te faz mais feliz.

Zend_AMF ou AMFPHP ?

Outra dúvida muito comum entre os programadores PHP. Eu costumo selecionar um ou outro dependendo do projeto em sí. Se o seu projeto vai usar alguns recursos do Zend Framework, e são muitos, utilize o Zend_AMF. Caso contrário, use AMFPHP.? Aqui chegamos a um impasse do qual julgo ser mais importante do que a briga entre Zend e AMFPHP: você ainda pensa em criar um projeto sem o Zend Framework? Você irá criar tudo que precisa “na mão” ou vai usar componentes de terceiros? Falo isso porque se um projeto em PHP é iniciado, o uso do Zend Framework irá acelerar muito o processo do mesmo. Rotinas como enviar email, acessar a sessão do php, gerenciar usuários com ACL, persistência de dados, acesso ao twitter… são todos muito bem implementados com o Zend e o Zend Framework é mantido pela mesma empresa que mantém o PHP, então não existe biblioteca mais segura em termos de continuidade do que esta.

E quais tecnologias vamos usar nas “melhores práticas” ?

Agora que discutimos as duas perguntas mais perguntadas em 2010 vamos a esta solução que julgo, pessoalmente, ser muito boa:

No cliente:

  • Adobe Flash Burrito e Flex SDK 4.5 (Basta baixar e instalar o Flash Burrito: http://labs.adobe.com/technologies/flashbuilder_burrito/).
  • SWIZ Framework (http://swizframework.org/)

No servidor:

  • PHP
  • Zend Framework (http://www.zend.com/community/downloads)
  • WAMP Server (para rodar o PHP na própria máquina – http://www.wampserver.com/en/download.php)
  • Netbeans ou Eclipse PDT – Eu estou gostando mais do Netbeans, então vou usá-lo.? (http://netbeans.org/downloads/index.html? – Versão PHP)

?

Certifique-se de ter tudo instalado, para que possamos dar prosseguimento no artigo.

Estrutura de pastas e projetos

Outra dúvida comum dos usuários, é definir a estrutura de pastas do projeto. Como instalamos o WAMP Server, ele nos fornece uma pasta onde é possível ter acesso pelo nacegador, através do endereço “localhost”. Isto é, ao acessarmos http://localhost/ o WAMP Server cuida de apontar para o diretório c:wampwww (que é o que chamamos de “document root”). Para que possamos entender a estrutura do projeto, é necessário compreender uma particularidade do Flex. Diferentemente do PHP, os arquivos que estão dentro do projeto Flex não precisam ser enviados ao servidor (os arquivos mxml, as, etc). veja que o Flex compila todos os mxml/as do projeto e gera um único arquivo swf. Este arquivo sim DEVE estar no diretório web do projeto!

Vamos então criar o projeto “melhoresPraticas” da seguinte forma:

  1. Crie a pasta c:wampwwwmelhoresPraticas Este é o diretório público do projeto, acessado através de http://localhost/melhoresPraticas?????????
  2. Crie a pasta c:wampwwwmelhoresPraticasclasses Este é o diretório onde iremos criar as nossas classes PHP
  3. Crie a pasta c:wampwwwmelhoresPraticasvos Este é o diretório onde as classes VOs serão criadas
  4. Crie a pasta c:wampwwwmelhoresPraticasZend Aqui você copia/cola o Zend framework, de forma que o arquivo melhoresPraticasZendLoader.php esteja acessível
  5. No Flash Builder, crie o projeto “melhoresPraticas”. Você pode deixar o DefaultLocation como está. Não clique em Finish, clique em Next, até chegar na configuração do “Compiled Flex application location”. Ou seja, aqui você irá informar para onde os aquivos compilados do flex irão ficar. Coloque o seguinte caminho: c:wampwwwmelhoresPraticasbin-debug. Não clique em Finish, clique em Next, e em Library Path, adicione a biblioteca swiz (o arquivo swc). Em “Output folder URL”, coloque: http://localhost/melhoresPraticas/bin-debug
  6. Com o projeto pronto, clique no botão RUN. Deve então surgir uma página em branco no endereço: http://localhost/melhoresPraticas/bin-debug/melhoresPraticas.html
  7. No Netbenas ou no eclipse, crie o projeto php apontando para c:wampwwwmelhoresPraticas

Testando a conexão

Com os projetos prontos, iremos inicialmente realizar uma simples conexão entre o Flex e o PHP. Isso é útil para que possamos começar com trabalho “pesado”. Para conectarmos o Flex no PHP, preciamos criar uma classe de conexão no Flex, que iremos chamar de ServiceBase, e um arquivo que recebe esta conexão no PHP, que chamaremos de gateway.php.

Para criar a classe ServiceBase, use o Flash Builder e acione o menu File > New > ActionScript Class e crie a classe de acordo com a imagem a seguir:

image

Classe ServiceBase:

package services
{
??? import mx.controls.Alert;
??? import mx.rpc.events.FaultEvent;
??? import mx.rpc.remoting.RemoteObject;
???
??? public dynamic class ServiceBase extends RemoteObject
??? {
??????? public function ServiceBase(classe:String)
??????? {
??????????? super(“zend”);
???????????
??????????? /*
???????????? * Como o arquivo swf está na pasta bin-debug,?
???????????? * precisamos subir um nível para chegarmos ao
???????????? * arquivo gateway.php
???????????? */
??????????? this.endpoint = “../gateway.php”;
???????????
??????????? this.source = classe;
??????????? this.addEventListener(FaultEvent.FAULT,OnFault);
??????? }
???????
??????? protected function OnFault(e:FaultEvent):void
??????? {
??????????? Alert.show(e.fault.faultString,”Erro” );
??????? }
??? }
}

Esta classe tem como principal objetivo estabelecer o endpoint, que é o gateway.php que ainda vamos criar. O atributo source define qual a classe que iremos acessar na pasta classes. Também adicionamos um listener genérico caso haja alguma falha na conexão. Veja que a classe é dinâmica (dynamic), ou seja, podemos chamar métodos da classe sem que eles estejam implementados na classe. Isso é útil pois os métodos chamados nesta classe serão os métodos remotos do PHP.

No servidor, temos que criar o arquivo gateway.php, com o seguinte código:

//Adiciona o autoloader do Zend Framework
// Assim todas as classes do framework
//? serão carregadas quando precisarem
require_once “Zend/Loader/Autoloader.php”;
Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);

//Instancia o servidor Zend_AMF
$server = new Zend_Amf_Server();

//Habilita o modo de desenvolvimento, retornando
// mensagens de erro. Comente esta linha quando
//?? estiver em modo de produção
$server->setProduction(false);

//Adiciona este diretorio como um diretorio de
// classes que podem ser usadas pelo Flex
$server->addDirectory(dirname(__FILE__).”/classes”);
set_include_path(dirname(__FILE__).”/vos”);

//TODO: Adicionar VOs

//Dependendo da requisição do Flex, irá
// chamar a classe correspondente, respondendo
//?? em formato AMF o que a classe responder.
echo $server->handle();

//Não fechar a tag PHP, nunca !!

?

O arquivo gateway.php é o ponto de entrada para as classes em PHP. Veja que inicialmente fazemos um include do Autoloader.php para que todas as classes do Zend Framework sejam instanciadas sem a necessidade de realizar requeires. Criamos então a instância do Zend_AMF_Server, que irá cuidar para que o flex consiga conversar com o PHP via AMF. Adicionamos o diretório classes como um diretório do AMF, onde as classes serão expostas ao flex e usamos o set_include_path para adicionar as classes que estão na pasta “vos” no path global do php, para que não precisamos fazer include das mesmas. Depois adicionaremos mais código sobre as classes VOs.

Na pasta “classes”, criamos a classe Teste, e o método sayHelloWorld. O nome do arquivo tem que ser o mesmo nome da classe, ou seja, Teste.php.

class Teste {
??? public function sayHelloWorld($name)
??? {
??????? return “Hello World $name”;
??? }
}

//Não feche a tag PHP!

?

Agora voltaremos ao Flex para que ele possa acessar a classe teste. No arquivo melhoresPraticas.mxml, adicionamos o seguinte código:

?


http://ns.adobe.com/mxml/2009″
?????????????? xmlns:s=”library://ns.adobe.com/flex/spark”
?????????????? xmlns:mx=”library://ns.adobe.com/flex/mx” minWidth=”955″ minHeight=”600″>
???
??????? ??????????? import mx.controls.Alert;
??????????? import mx.rpc.events.ResultEvent;
???????????
??????????? import org.swizframework.utils.services.ServiceHelper;
???????????
??????????? import services.ServiceBase;
??????? ]]>
???

???
???
??????? ???????????
??????????? var testeService:ServiceBase = new ServiceBase(“Teste”);
??????????? var serviceHelper:ServiceHelper = new ServiceHelper();
???????
??????? serviceHelper.executeServiceCall(
??????????? testeService.sayHelloWorld(“Daniel”),
??????????? function(e:ResultEvent):void{
??????????????? Alert.show(e.result.toString());
??????????? });
???????
??????? ]]>
???

???

?

Como estamos realizando um teste, fazemos o acesso ao PHP no evento creationComplete da aplicação. Criamos a variável testeService que é do tipo ServiceBase, repassando o parâmetro que é o nome da classe no PHP, ou seja, “Teste”. Também criamos a variável serviceHelper que pertence ao Swiz e é um facilitador de acessos ao PHP. Usamos no serviceHelper? o método executeServiceCall, que irá chamar remotamente o método sayHelloWorld repassando o parâmetro “Daniel” e quando concluído, executará a função que está no segundo parâmetro, realizando um Alert.

Ao executar esta aplicação, quando é carregada surgirá a mensagem de retorno do PHP:

?

image

Criando as classes em Service

Com o teste de conexão realizado, podemos avançar mais no código! A primeira refatoração que faremos é em relação as classes que estão na pasta service. Até agora criamos o seguinte código:

??? var testeService:ServiceBase = new ServiceBase(“Teste”);

Ao invés de criar a instância de ServiceBase repassando uma string que é o nome da classe, iremos criar a classe TesteService, da seguinte forma:

image

package services
{
??? public dynamic class TesteService extends ServiceBase
??? {
??????? public function TesteService()
??????? {
??????????? super(“Teste”);
??????? }
??? }
}

Veja que, ao criarmos a classe TesteService, podemos alterar o código da aplicação principal da seguinte forma:

var testeService:TesteService = new TesteService();

Implementando o SWIZ

Um dos melhores benefícios que o SWIZ traz é a possibilidade de separar todo o código Flex em camadas, assim como é feito no padrão MVC. Se você ainda não conhece SWIZ, é melhor conhecer, pois se está lendo este artigo está procurando criar aplicações com uma qualidade melhor e não há como chegar a esse nível sem um framework. O Swiz é o o melhor em termos de custo/benefício, porque nao é o mais fácil de aprender nem o mais complicado, e nao é o mais simples e nem o mais completo. É o meio termo em tudo.

Para usarmos o SWIZ, preciamos estabelecer algumas pastas dentro do projeto Flex, que serão nossas camadas. São elas:

  • config: contém os arquivos que chamamos de “bean”, que são os arquivos que fornecem informações para serem injetadas em outras classes
  • controllers: contém os arquivos que “ditam” a dinamica da camada de visualização
  • services: contém os arquivos que fazem o acesso ao PHP
  • events: contém eventos que podem ser disparados e mediados pelo flex
  • valueObjects: são os VOs que iremos usar na aplicação
  • views: contém os formúlários, é a camada de visão

Na pasta config, iremos criar o arquivo Bean.mxml, com o seguinte código:

??? xmlns:fx=”http://ns.adobe.com/mxml/2009″
??? xmlns:s=”library://ns.adobe.com/flex/spark”
??? xmlns:swiz=”http://swiz.swizframework.org”
??? xmlns:services=”services.*”
??? >
???
???
???

?

Neste bean, criamos a variável “testeService”, que é o tipo TesteService. Atenção quando ao uso de letras maiúsculas e minúsculas.? Sempre voltaremos no Bean.mxml para adicionar mais variáveis e com isso, injetá-las nos formulários e controllers da aplicação. Precisamos ainda configurar o Swiz no projeto principal da aplicação (melhoresPraticas.mxml):


http://ns.adobe.com/mxml/2009″
?????????????? xmlns:s=”library://ns.adobe.com/flex/spark”
?????????????? xmlns:mx=”library://ns.adobe.com/flex/mx”
?????????????? xmlns:swiz=”http://swiz.swizframework.org”
?????????????? minWidth=”955″ minHeight=”600″ xmlns:config=”config.*”>
???
???
???????
???????????
???????????????
???????????

???????????
???????????
??????????????? ??????????????????? eventPackages=”events.*”
??????????????????? viewPackages=”views.*”
??????????????????? />
???????????

???????????
???????????
???????????????
???????????

???????????
???????

???

???

?

Esta configuração, adicionada dentro do fx:Declarations, realiza uma configuração padrão no SWIZ. Basicamente adicionamos o Bean que criamos e definimos onde as classes relacionadas a eventos e formulários ficarão. Também definimos um LOG que será apresentado na aba Console do Flex se estiver rodando em modo de Debug.

Após a configuração

Podemos por exemplo criar a tela de login, e outras telas do sistema. Deixarei o código fonte da aplicação para que você possa olhar com calma.

Pegue o código fonte aqui

Conclusão

A lista a seguir é um resumo de melhores práticas que julgo importantes

  • Use módulos/sub applications somente se precisar mesmo. Não comece um projeto de 10 telas querendo usar módulos para cada tela.
  • Separe sua aplicação em camadas. Você escreve mais e cria mais artigos, mas o projeto fica mais consistente.
  • Você não precisa criar o arquivo services-config.xml para conectar sua app no servidor. Pode-se criar uma classe cujo o endpoint é um caminho RELATIVO ao gateway.
  • Use o caminho RELATIVO sempre, para faclitar o deploy da sua app. Isto é, use “../gateway.php” ao invés de “http://localhost/gateway.php”.
  • Injete o controller na view, para passar dados à ela. Se deseja enviar mensagens para a view, então use eventos
  • Não injete a view no controller.
  • Use o dispatcher do SWIZ.
  • Use o serviceHelper do SWIZ.
  • Quando criar um formulário na view, faça o databind com uma variável do controller.
  • Use eventos com moderação. Particularmente eu uso os eventos para notificar a view de alguma mudança, nunca para passar dados, que é função do controller.
  • Se você quer chamar um método da view pelo controller, use eventos.
  • Mais?
Fev 26

Tutorial Básico Swiz Framework 1.0

Escrito por Janderson Cardoso em Adobe Flex, Flex, Flex 4, Ria’s Geral, Swiz Framework @ 02 26th, 2011 | via http://www.jandersonfc.com/ | Sem comentários
Janderson Cardoso
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »


 Tutorial Básico Swiz Framework 1.0

Bem, estou muito feliz por esse início de ano 100% Flex, seja tirando dúvidas, desenvolvendo ou corrigindo alguns detalhes em aplicações, enfim, é muito bom voltar com o flex na minha carga horária icon biggrin Tutorial Básico Swiz Framework 1.0 #FlexNaVEIA

Bem, nesse início de ano a coisa que mais me perguntaram foi, o swiz vale a pena? tem como fazer um exemplo usando o novo swiz? então resolvi fazer esse tutorial onde tentarei ser o mais básico possível, espero justificar o porque é bom ter o Swiz como uma alternativa de Framework para você usar em suas aplicações Flex.

Embora esteja fazendo esse ABC é bom que todos divulguem os excelentes materias que já foram disponibilizados sobre o assunto como a próprio Wiki do Swiz que é bem completo, esse material do nosso amigo Mario Junior ( Swiz + Modules ) , o material também disponibilizado pelo nosso amigo Erko Bridee ( [Flex & AIR] Swiz Framework + Presentation Model : Exemplo de Projeto ), tem também os que disponibilizei no Flexmania no ano de 2010 ( #flexmania 2010 – disponibilizando código fonte ). Além desses links tem o que criei no curso de Design Patterns ( flexdp ), onde sou o instrutor, fiz um exemplo com flex4 + swiz + presentation model, é baseado nesse modelo um pouco mais simplificado e sem tratar os design patterns que vou fazer esse tutorial para vocês icon wink Tutorial Básico Swiz Framework 1.0 . Let’s go icon biggrin Tutorial Básico Swiz Framework 1.0

Conhecendo o Swiz

Para quem ainda não conhece o swiz framework, ele é um framework para Action Script 3(Portanto usamos no Flex tranquilamente), e como todo bom framework o swiz cuida de algumas partes chatas enquanto nos preocupamos mais com o nosso modelo de negócio. Vou me basear nesses 3 pontos que considero bons motivos para usar o Swiz:

  1. Ajuda no mapeamento de eventos tirando a necessidade de addEventListener para cada Evento disparado, isso tudo com o uso da metadata [EventHandler].
  2. IOC(Inversão de Controle) containers e DI(Injeção de Dependências) sendo feito por metadata [Inject].
  3. Utilitários como o ServiceHelper e ChannelSetHelper que ajuda na comunicação com serviços como WebService ,RemoteObject,etc…

Irei explicar com calma cada item deste citado acima principalmente quando for mostrando o código fonte, porém vale ressaltar que um dos melhores pontos é o baixo acoplamento entre o framework e nossa aplicação, com o bom uso de metadatas o swiz consegue nos auxiliar na construção de uma aplicação e não se meter na forma como organizamos o projeto. O Swiz em suas versões mais novas não é mais um framework MVC como já disse em outro post no blog ( http://www.jandersonfc.com/swiz-nao-e-framework-mvc/ ) , o swiz se concentrou em ser um IOC e DI eficiente que vamos conhecer mais detalhadamente a partir de agora icon smile Tutorial Básico Swiz Framework 1.0

Swiz na prática

Não tem nada melhor para aprender algo do que um exemplo prático, no nosso caso um CRUD, depois do “Hello Word” é a forma mais requisitada que conheço, vamos fazer um cadastro de Contatos , bem simples e só a parte do Flex(e sem se preocupar com o layout no momento)… vamos usar um recurso do próprio Swiz (MockDelegateHelper)para simular as chamadas aos serviços no backend.

Aqui está o projeto rodando

aqui está o código fonte do projeto ( https://github.com/jandersonfc/ContactSwiz )

Para não ficar muito extenso vou postar parte do código que apenas seja útil para entender o Swiz, qualquer dúvida podem usar o comentário a vontade para isso.

Mapeando os eventos

uma das grandes vantagem de usar o Swiz é o suporte que ganhamos para tratar nossos eventos, através do uso de metadatas [EventHandler] podemos deixar nosso código bem desacoplado de quem envia para quem recebe os eventos, vamos ao exemplo do nosso tutorial:

perceba que desacoplamos completamente nosso Presentation Model(ContactPM) do resto da aplicação, ele só dispara um evento e através do swiz nosso Controller(ContactController) será invocada.

Obs. Perceba essa primeira variável,a dispatcher, ela usa um metadata do Swiz [Dispatcher], o framework recomenda trabalhar dessa forma embora usando eventos com bubles também funcione.

Agora vamos analisar esse trecho da nossa Controller :

Quando disparamos o evento ContactEvent.GET_CONTACTS em nosso Presentation Model(ContactPM) o Swiz irá invocar esse método getContacts() do nosso ContactController, isso porque esse método possui um metadata do swiz [EventHandler] com o tipo do evento que ele fica na escuta, nesse caso o event=”ContactEvent.GET_CONTACTS”.  A mágica fuciona tão bem que nossa PM(Presentation Model) e Controller não se conhecem, e é esse o grande ganho que temos em usar esse EventHandler do Swiz, baixo acoplamento o que ajuda e muito na manutenção de nossa aplicação.

Mas toda mágica para funcionar precisa de um truque, e com o Swiz não é diferente, por isso existe o seu arquivo de configuração que mostro abaixo.

para essa mágica funcionar precisamos informar esses atributos eventPackages e viewPackages para o swiz:

  • eventPackages – indica para o swiz onde estão nossos eventos customizados para quando informarmos o tipo no [EventHandler] ele saiba como tratar o mesmo.
  • viewPackages – indica para o swiz onde estão nossas views que disparam os eventos.

Obs. Observe esse

IOC containers e DI

Além da forma como Swiz nos ajuda a trabalhar com os eventos, o que já considero um ganho e tanto, o Swiz possui um excelente IOC container e DI através do metadata [Inject], vamos mais uma vez analisar nosso Controller:
perceba o [Inject] em cima dos atributos do nosso controller, isso quer dizer que quando nossa aplicação for iniciada o swiz vai procurar referências em seu container desse objeto e vai injetá-lo em nosso Controller. Mais uma linda mágica icon biggrin Tutorial Básico Swiz Framework 1.0

Como assim? Como o Swiz vai saber por exemplo que esse contactDelegate que é uma Interface (IContactDelegate) qual implementação(ContactDelegate e ContactDelegateFake) usar na hora de criar a instancia desse objeto? Aí vem mais um truque, o nosso arquivo que citei mais acima, o nosso Beans.mxml, é o que chamamos de IOC container do swiz:

É aí que você vai mapear os objetos que você quer que quando a aplicação for iniciada o swiz crie instancias desses objectos. Bem, ainda não entendeu? O fluxo é esse.

  1. Aplicação inicia.
  2. O Swiz pega esses objetos que você informou nesse container e instancia os mesmos. ex. contactdelegate = new ContactDelegateFake().
  3. O Swiz vai procurar se tem algum [Inject] referenciando esse id informado no container e vai tentar injetar essa instancia que ele criou.

É por isso que em nenhum momento na nossa ContactController foi preciso instanciar o atributo contactDelegate, o swiz cuidou disso pra nós, e isso chamamos de DI, quando a responsabilidade de instanciar suas dependências não é do próprio objeto, no nosso caso a Controller não instancia a suas dependências e sim o Swiz. Uma coisa interessante que gostaria que vocês observassem é que nesse exemplo existe duas implementações do IcontactDelegate, o ContactDelegate e ContactDelegateFake, está ativo no exemplo o Fake mas para mudar para o Delegate que usa o RemoteObject é só mudar de:

para:

ou seja, alteramos no arquivo de configuração do swiz e não precisamos mudar nada no código da nossa aplicação, isso tudo porque na Controller mencionamos apenas uma interface e não a sua implementação que só é definida em tempo de execeção pelo Swiz.

Service Helper

algo muito útil também no swiz é seu serviceHelper que nos auxilia na comunicação com o nosso backend, que na maioria das vezes é feito via RemoteObject, vamos analisar na nossa Controller:

é bem simples o seu uso e de fácil entendimento, ao chamar o método executeServiceCall passando 3 parametros já é
o suficiente para o swiz fazer a requisição no backend ou chamar quem faça(no nosso caso o Delegate que faz isso) e mapear qual função vai tratar o retorno do nosso RemoteOject em caso de sucesso ou em caso de erro.

Conclusão


Espero com esse exemplo e rápida explicação tenha te incentivado a usar o mesmo, e lembre-se, o swiz não impôe uma forma de estruturar sua aplicação, nada impede de você injetar a Controller no Presentation Model e diminiur a quantidade de eventos disparados na aplicação por exemplo, nem de usar MVC ou não em sua arquitetura.

Uma coisa que sempe digo é que antes de usar algo que facilite seu desenvolvimento você precise aprender sem as facilidades, eu tive que aprender como mapear o Hibernate com XML para depois perceber o ganho que tinha com os Annotations, talvez você precise aprender como funciona os eventos em actionScript para perceber o ganho que terá usando os [EventHandler] do Swiz por exemplo icon wink Tutorial Básico Swiz Framework 1.0

O swiz possui mais algumas funcionalidades, mas essas são as básicas para você já começar a usá-lo, então faça bom proveito icon wink Tutorial Básico Swiz Framework 1.0

Cumps.


 Tutorial Básico Swiz Framework 1.0

Similar Posts:

  • Swiz não é mais Framework MVC!
  • TUTORIAL JAVA + FLEX NA PRÁTICA 5/6
  • MVC da teoria para a prática
  • TUTORIAL JAVA + FLEX NA PRÁTICA 3/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA (9) – Atualizando o Swiz

Dez 30

Retrospectiva 2010

Escrito por Fabio da Silva em 1, 2.0, 4, 6, action, Actionscript, ActionScript 3, Adobe, Adobe Flex, Air, AIR 2.0, Animações, AR, as3, BI, blog, Blogs, consultoria, control, cs4, Desenvolvedor, Desenvolvimento, e-genial, egenial, empresas, Engnatv, eval, Feevale, flash, Flex, Flex 3, Flex 4, for, framework, Google, Hibernate, html, IE, int, Java, jogo, Jogos, JPA, mg, mysql, O, on, online, Outros, PHP, produtividade, produto, prototipação, pt, rest, RIA, Ria’s Geral, site, Software, Swiz Framework, Tecnologia, Treinamento, treinamentos, tv, UI, UX, Ved, web @ 12 30th, 2010 | via http://fabiophx.blogspot.com | Sem comentários
Fabio da Silva
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Além dos treinamentos de AS3 com Flash e Adobe Flex (3 e 4) na Alfamídia e Adobe Flex (3 e 4) na TargetTrust este ano de 2010 trouxe inúmeras oportunidades e desafios profissionais.

Alguns treinamentos in company:
  • Animações com ActionScript 3 no Flash CS4 para professores e alunos do projeto Engnatv na faculdade Feevale. Mais detalhes aqui.
  • Flex 3 e 4 na Azul Tecnologia em Fortaleza – CE. Mais detalhes aqui.
  • Flex 4 para a Braskem na Alfamídia.
  • Flex 4 na BSInfo em Bento Gonçalves – RS.
  • Convite do Igor Costa para um treinamento de Flex 4 em Florianópolis – SC como instrutor substituto da RIACycle.

Também fiz alguns treinamentos:

  • AIR 2.0 Essencial pela RIACycle ministrado pelo Igor Costa.
  • Planejamento, Prototipação e Execução de um projeto Flex/Swiz Framework e PHP/MySQL online pela e-Genial ministrado pelo Fábio Vedovelli.
  • PHP 5 e Produtividade em Java com JPA e Hibernate na TargetTrust.

Entre outros:

  • Lançamento do Flex 4 e o seu uso na Sadig na nova geração de produtos.
  • Convite da Gabriela para substituí-la em algumas cadeiras de AS3 para jogos que ela ministra na faculdade Feevale.

E neste mês de dezembro aceitei um novo desafio, o de prestar consultoria e desenvolvimento (PHP e Flex) na Ouro Moderno, empresa desenvolvedora de treinamentos interativos e também de software para empresas de treinamento para controlar alunos e treinamentos realizados.

A todos os envolvidos meus sinceros agradecimentos.

E deixo também aqui o meu desejo de um Feliz e Próspero 2011 para todos.

Que venha novos desafios.

Dez 6

Gravação do webminar: Planejamento, Prototipação e Execução de um projeto Flex/Swiz Framework e PHP/MySQL

Escrito por Ved em AR, e-genial, Flex, framework, mysql, O, on, Palestra, PHP, prototipação, Ria’s Geral, Swiz Framework, UI, web @ 12 6th, 2010 | via http://www.vedovelli.com.br | Sem comentários
Ved
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Planejamento, Prototipação e Execução de um projeto Flex/Swiz Framework e PHP/MySQL from e-Genial on Vimeo. O documento apresentado no webminar pode ser baixado aqui.

Nov 4

Swiz não é mais Framework MVC!

Escrito por Janderson Cardoso em Adobe Flex, Flex, mvc, Ria’s Geral, Swiz Framework @ 11 4th, 2010 | via http://www.jandersonfc.com/ | Sem comentários
Janderson Cardoso
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »


 Swiz não é mais Framework MVC!

Esse post vai para galera do Flex e tem esse Título com um certo tom de contradição justamente para alertar sobre alguns equívocos que cometemos por não conhecer de verdade como um framework funciona e qual é o seu real Objetivo. Vou mostrar o caso do swiz só para vocês meditarem sobre isso.

SWIZ FRAMEWORK

Swiz é um framework muito bem organizado, podemos dizer que o swiz é:

IOC(Inversion of Control) containers – o arquivo Swiz(Classe do core do framework) é o ioc containers, que por sua vez carrega os BeanLoaders que é onde podemos colocar qualquer classe (da nossa aplicação ou não) para ser instanciada pelo swiz , quando a aplicação flex for iniciada o swiz cria intancia dos beans colocados no containers que por padrão usam o design patterns singleton para garantir apenas uma instancia desses beans(por default já que podemos escolher o padrão prototype para esse caso também). Normalmente no nosso BeanLoaders colocamos nossos RemoteObject, controladoras, delegates, presentation Model, etc…

IOC  como o próprio nome diz significa que algumas responsabilidades não será da nossa aplicação mas sim do Framework, basicamente todo framework é um IOC já que ele em algum momento assume responsabilidade sobre uma atividade na aplicação, porém nem todos frameworks tem um container como é o caso do swiz, esse container deixa o framework mais dinâmico, podemos informar as classes que queremos que ele instancie, quais packages queremos que ele intercepte caso seja disparado um evento… A metadata [Mediate] é um exemplo de como um IOC do swiz funciona, quando é disparado um evento na aplicação o swiz procura o método que possui o metadata [Mediate] que correspende aquele evento disparado e invoca o método.

DI(Dependency Injection) – Essa é uma das melhores partes do swiz, usar Metadata(no java Annotations) para injetar as dependências. Através do uso da metadata [Inject] o swiz consegue injetar qual objeto que deve ser usado naquele caso. Perceba que é responsabilidade do IOC containers comunicar para o swiz quais os objetos que devem ser instanciados e através de um metadata [Inject] o framework pega a instancia que ele já criou quando subiu a aplicação e injeta no atributo que se encontra com a metadata [Inject]. Injeção de dependência é tirar a responsabilidade daquela classe de instanciar os objetos(Atributos) que ela depende para funcionar. O swiz usa como base para injeção de dependência o IOC containers criado por nós, então é correto dizer que IOC é uma forma de injetar dependências (DI) mas é bom você ter ciência que não é a única forma.

o Swiz é isso,IOC e DI,  aonde está o MVC? em lugar nenhum. podemos não implementar um MVC e usar o swiz para desacoplar responsabilidades usando injeção de depenências e/ou facilitar a forma com que trabalhamos com os eventos no flex. O fato de usar MVC é um boa prática e a própria documentação do framework recomenda porém o swiz não é framework MVC.

Principalmente no caso do swiz é normal essa confusão, já que em suas primeiras versões se tratava de um framework MVC, porém com a maturidade de seu container e um bom uso de metadata o foco foi mudando. Por isso é muito importante você analisar  o que realmente cada framework faz, baixe o código fonte do mesmo, tente  entender e assim você não será enganado pelas aparências.

Espero que medite sobre o mesmo e logo perceberá que o Spring(AS) e Mate também não são frameworks MVC.

Cumps.


 Swiz não é mais Framework MVC!

Similar Posts:

  • Tutorial Básico Swiz Framework 1.0
  • TUTORIAL JAVA + FLEX NA PRÁTICA (9) – Atualizando o Swiz
  • TUTORIAL JAVA + FLEX NA PRÁTICA 3/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 5/6
  • #CafxFramework – Menos código, Mais café!

Nov 3

[ Adobe Flex ] Mudando o estilo visual dos Charts

Escrito por Erko Bridee em 1, 2009, 4, 6, action, Actionscript, Actionscript3, Adobe, Adobe Air, Adobe Flex, Air, api, app, AR, Artigo, as3, AUG, auto, back, bar, BI, Bindable, blog, browser, case, class, classe, classes, código, collection, Componente, Componentes, control, Controls, DataProvider, efeito, Estilo, exemplo, filter, Flex, Flex 3, Flexmania, for, framework, function, Google, Gráfico, html, ide, IE, if, image, int, Java, Java Magazine, Javascript, label, layout, live, MEF, mg, MXML, Number, O, on, Oracle, padrão, pt, Ria’s Geral, string, Stroke, Swiz Framework, TAT, try, UI, uint, Ved, web, XML, XMLList, XP @ 11 3rd, 2010 | via http://blog.erkobridee.com | Sem comentários
Erko Bridee
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »



Algo legal no Flex é que eles nos disponibiliza gráficos, porém, sinceramente o estilo padrão dos gráficos com cores sólidas não me agrada muito, ao meu ver cansa os olhos, então resolvi mudar as cores solidas para um padrão em degrade, para suavizar as cores…

 

Obs.: tendo em mente que os componentes dos gráficos ainda são os mesmos no Flex 3 e 4 os códigos mxml a seguir serão do Flex 3.

 

Começando pelo gráfico de barras, para ter o seguinte resultado precisei:

column-chart

Código MXML:

?View Code ACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">
 
    <mx:Script>
        <![CDATA[
        	import code.StyleColumnChart;
 
            import mx.charts.chartClasses.IAxis;
 
            private function linearAxis_labelFunc(item:Object, prevValue:Object, axis:IAxis):String {
                return currencyFormatter.format(item);
            }
 
            private function categoryAxis_labelFunc(item:Object, prevValue:Object, axis:CategoryAxis, categoryItem:Object):String {
                var datNum:Number = Date.parse(item);
                var tempDate:Date = new Date(datNum);
                return dateFormatter.format(tempDate).toUpperCase();
            }
        ]]>
    </mx:Script>
 
    <mx:DateFormatter id="dateFormatter" formatString="DD" />
    <mx:CurrencyFormatter id="currencyFormatter" precision="2" />
 
    <mx:XMLListCollection id="dp">
        <mx:source>
            <mx:XMLList>
                <quote date="8/1/2007" open="40.29" close="39.58" />
                <quote date="8/2/2007" open="39.4" close="39.52" />
                <quote date="8/3/2007" open="39.47" close="38.75" />
                <quote date="8/6/2007" open="38.71" close="39.38" />
                <quote date="8/7/2007" open="39.08" close="39.42" />
                <quote date="8/8/2007" open="39.61" close="40.23" />
                <quote date="8/9/2007" open="39.9" close="40.75" />
                <quote date="8/10/2007" open="41.3" close="41.06" />
                <quote date="8/13/2007" open="41" close="40.83" />
                <quote date="8/14/2007" open="41.01" close="40.41" />
                <quote date="8/15/2007" open="40.22" close="40.18" />
                <quote date="8/16/2007" open="39.83" close="39.96" />
                <quote date="8/17/2007" open="40.18" close="40.32" />
                <quote date="8/20/2007" open="40.55" close="40.74" />
                <quote date="8/21/2007" open="40.41" close="40.13" />
                <quote date="8/22/2007" open="40.4" close="40.77" />
                <quote date="8/23/2007" open="40.82" close="40.6" />
                <quote date="8/24/2007" open="40.5" close="40.41" />
                <quote date="8/27/2007" open="40.38" close="40.81" />
            </mx:XMLList>
        </mx:source>
    </mx:XMLListCollection>
 
    <mx:ColumnChart id="columnChart"
            showDataTips="true"
            dataProvider="{dp}"
            width="100%"
            height="100%">
 
        <!-- vertical axis -->
        <mx:verticalAxis>
            <mx:LinearAxis baseAtZero="false"
                    labelFunction="linearAxis_labelFunc" />
        </mx:verticalAxis>
 
        <!-- horizontal axis -->
        <mx:horizontalAxis>
            <mx:CategoryAxis id="ca"
                    categoryField="@date"
                    title="August 2007"
                    labelFunction="categoryAxis_labelFunc" />
        </mx:horizontalAxis>
 
        <!-- horizontal axis renderer -->
        <mx:horizontalAxisRenderers>
            <mx:AxisRenderer axis="{ca}"
                    canDropLabels="true" />
        </mx:horizontalAxisRenderers>
 
        <!-- series -->
        <mx:series>
            <mx:ColumnSeries
            		displayName="Open"
                    xField="@date"
                    yField="@open"
                    fill="{StyleColumnChart.orangeLinearGradient}"
                    stroke="{StyleColumnChart.orangeStroke}">
            </mx:ColumnSeries>
            <mx:ColumnSeries
            		displayName="Close"
                    xField="@date"
                    yField="@close"
                    fill="{StyleColumnChart.blueLinearGradient}"
                    stroke="{StyleColumnChart.blueStroke}">
            </mx:ColumnSeries>
        </mx:series>
 
        <!-- series filters -->
        <mx:seriesFilters>
            <mx:Array />
        </mx:seriesFilters>
    </mx:ColumnChart>
</mx:Application>

Obs.: esse código acima reaproveitei do respectivo post do blog.flexexamples.com

Código da classe AS3 para gerar o efeito visual:

?View Code ACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package code
{
	import mx.graphics.GradientEntry;
	import mx.graphics.LinearGradient;
	import mx.graphics.Stroke;
 
	[Bindable]
	public class StyleColumnChart
	{
		public function StyleColumnChart() {}
 
		//----------------------------------------------------------------------
		// @BEGIN: LinearGradient color
 
		public static function linearGradientColor(colorDark:uint, colorLight:uint):LinearGradient {
			var linearGradient:LinearGradient = new LinearGradient();
			var arr:Array = [];
			arr.push(new GradientEntry(colorDark, 0.0, 0.8));
			arr.push(new GradientEntry(colorLight, 1.0, 0.6));
			linearGradient.entries = arr;
			return linearGradient;
		}
 
		public static function get redLinearGradient():LinearGradient {
			return linearGradientColor(0x990000,0xEE0000);
		}
 
		public static function get greenLinearGradient():LinearGradient {
			return linearGradientColor(0x008B00,0x00FF00);
		}
 
		public static function get blueLinearGradient():LinearGradient {
			return linearGradientColor(0x0066FF,0x00CCFF);
		}
 
		public static function get yellowLinearGradient():LinearGradient {
			return linearGradientColor(0xCAC333, 0xF5F30E);
		}
 
		public static function get orangeLinearGradient():LinearGradient {
			return linearGradientColor(0xFC9C00, 0xFCC048);
		}
 
		// @END: LinearGradient color
		//----------------------------------------------------------------------
		// @BEGIN: stroke color
 
		public static function strokeColor(color:uint):Stroke {
			return new Stroke(color,1);
		}
 
		public static function get redStroke():Stroke {
			return strokeColor(0x990000);
		}
 
		public static function get greenStroke():Stroke {
			return strokeColor(0x008B00);
		}
 
		public static function get blueStroke():Stroke {
			return strokeColor(0x0066FF);
		}
 
		public static function get yellowStroke():Stroke {
			return strokeColor(0xCAC333);
		}
 
		public static function get orangeStroke():Stroke {
			return strokeColor(0xFC9C00);
		}
 
		// @END: stroke color
		//----------------------------------------------------------------------
	}
}

A seguir segue um exemplo para gráfico de pizza:

pie-chart

Código MXML:

?View Code ACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
  <mx:Script>
    <![CDATA[
     import mx.collections.ArrayCollection;
 
     import code.StylePieChart;
 
     [Bindable]
     public var expenses:ArrayCollection = new ArrayCollection([
        {Data:"IN", Value:2000},
        {Data:"OUT", Value:1000}
     ]);
 
    ]]>
  </mx:Script>
 
  <mx:Panel title="Pie Chart">
 
     <mx:PieChart id="myChart"
        dataProvider="{expenses}"
        showDataTips="true">
        <mx:series>
           <mx:PieSeries
                field="Value"
                nameField="Data"
                labelPosition="callout"
                fills="{StylePieChart.inOutFills}"/>
        </mx:series>
     </mx:PieChart>
 
     <mx:Legend dataProvider="{myChart}"/>
 
  </mx:Panel>
 
</mx:Application>

Código da classe AS3 para gerar o efeito visual:

?View Code ACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package code
{
	import mx.graphics.GradientEntry;
	import mx.graphics.RadialGradient;
	import mx.graphics.SolidColor;
 
	[Bindable]
	public class StylePieChart
	{
		public function StylePieChart()	{}
 
		//----------------------------------------------------------------------
 
		public static function get inOutFills():Array {
			var gradients:Array = new Array();
 
			var fill:RadialGradient = null;
			var g1:GradientEntry = null;
			var g2:GradientEntry = null;
 
			fill = new RadialGradient();
			g1 = new GradientEntry(0xCC3640);
			g2 = new GradientEntry(0x990000);
			fill.entries = [g1,g2];
			gradients.splice(-1,0,fill);
 
			fill = new RadialGradient();
			g1 = new GradientEntry(0x30BB32);
			g2 = new GradientEntry(0x009900);
			fill.entries = [g1,g2];
			gradients.splice(-1,0,fill);
 
			return gradients;
		}
 
		//----------------------------------------------------------------------
	}
}

Para achar as cores utilizei os itens descritos neste post: [Adobe AIR] Color Browser


Veja também:

  • [Flex & AIR] Swiz Framework – meus primeiros passos
  • Java Magazine 68 : Artigo sobre Adobe Flex e AIR
  • s:TextArea – recuperando um texto selecionado
  • [Flex & AIR] Swiz Framework + Presentation Model : Exemplo de Projeto
  • FlexMania 2010 – Adobe Flex + Oracle WebLogic 10.x

« Entradas anteriores |

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2750 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com