Desafios no desenvolvimento de
 uma aplicação real com Flex




       João Augusto Zaratine <zaratine@gmail.com>
                 blog.joaoaugusto.com.br
                      @joaozaratine
                        Julho/2010
Eu
        Flex desde 2007

Informant <www.informant.com.br>

NOUS <www.noussoftware.com>

     blog.joaoaugusto.com.br

          @joaozaratine
A APLICAÇÃO
http://vimeo.com/13278187
           Texto
DESAFIO #1
Criando textos de verdade
O que queríamos...
O que tínhamos...
✓Alinhamento
✓Tamanhos            ๏Imagens
✓sublinhado
 Negrito, itálico,
                     x Colunas
                     x Tabelas
✓Marcadores          x Embed
✓Cores               x Ctrl+V do Word
✓Links
✓Alinhamento
✓Tamanhos            ✓Colunas
✓sublinhado
 Negrito, itálico,
                     ๏Imagens
                     x Tabelas
✓Marcadores          x Embed
✓Cores               x Ctrl+V do Word
✓Links
É quase impossível usar
         o TLF
“O CKEditor é o que
precisamos... Isso não é
       Flex, é?”
“Já sei, vamos fazer um
          popup”
Bom, agora só falta
 exibir o texto....
DESAFIO #2
Exibindo conteúdo HTML
Tentativa #1
   htmlText
✓ <a>            ✓ <u>
✓ <b>            x <div>
✓ <br>           x <table>, <th>, <tr>, <td>
✓ <font>         x <object>, <embed>
✓ <img>          x <em>
✓ <i>            x <form>
✓ <li>           x <input>
✓ <p>            x <h1>, <h2>, <h3>, <h4>...
✓ <textformat>   x Etc e tal
Tentativas #2 #3
  #4 #5 #6...
DENG
DENG
   IFrame 1
DENG
           IFrame 1
IFrame 2
DENG
           IFrame 1
IFrame 2
               IFrame 3
DENG
           IFrame 1
IFrame 2
               IFrame 3
 IFrame 4
DENG
IFrame 5     IFrame 1
  IFrame 2
                 IFrame 3
    IFrame 4
DENG
                        IFrame 6
IFrame 5     IFrame 1
  IFrame 2
                 IFrame 3
    IFrame 4
Qual é o melhor lugar para
      exibir HTML?
Qual é o melhor lugar para
      exibir HTML?

Talvez numa página HTML?
Largura:100%




                             Altura: 100%
Aplicação Flex Tradicional


       Flex ScrollBars
Largura:100%




                    Altura definida pela conteúdo
 NOUS (Flex)

Browser ScrollBar

     HTML
Browser
Página HTML




                                                                          NOUS (Flex)



Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam vitae elit placerat justo sollicitudin posuere. Sed pulvinar velit eu elit pellentesque tristique. Nam consectetur
dui eu elit consectetur eget tincidunt massa vestibulum. Vivamus nisi libero, pretium et aliquet ut, ultrices ac purus. Etiam nibh dui, faucibus ut venenatis ut, accumsan a augue.

                                                          Conteúdo HTML
Sed feugiat nisi sed ipsum bibendum imperdiet. Etiam lobortis vulputate metus ac interdum. Morbi porta semper vestibulum. Pellentesque lobortis quam non diam sagittis vitae
rhoncus tortor viverra. Nam ut ultricies urna.
Área que mostra conteúdo apareceu?
   ADDED_TO_STAGE ou SHOW




ExternalInterface.call(mostraDivECarreg
          aConteudoPorAjax)
Área que mostra conteúdo desapareceu?
   REMOVED_TO_STAGE ou HIDE




ExternalInterface.call(escondeDivEApaga
             SeuConteudo)
DESAFIO #3
Eternal Loading....
AÇÃO #1
Recompactar todas as imagens
AÇÃO #2
Remover todos Embed das
        imagens
    (a não ser que elas apareçam na primeira tela)
AÇÃO #3
 Criar mais Modules e não
carregá-los com a aplicação
“Mas agora quando eu entro no
 módulo administração a tela
    demora pra aparecer”
Depois que a aplicação é carregada e aparece na
 tela, carregamos todos os módulos sem que o
                  usuário saiba
“Mas essa aplicação ainda demora
        muito pra abrir”
AÇÃO #4
Login antes de carregar a
        aplicação
Pessoas consideram uma aplicação
     rápida por duas razões:
1) Ou elas são rápidas de verdade
               ou...
2) Ou elas dão a impressão de
       serem rápidas
Passo #1
Exterminar a tela de login do Flex
Passo #2
Criar uma nova tela de login em HTML
Passo #3
Colocar a nova tela de login em cima da tela
de loading do Flex
DESAFIO #4
Performance
90% dos problemas de performance estavam no back-end
ANTES



select t from Topic t
DEPOIS


select t.name,
       t.description,
       t.date
       from Topic t
ANTES

public class Package
{
	 	 public var id:Number;
     public var status:String;
	 	 public var packageBarcode:String;
	 	 public var orderItem:OrderItem;
}
OrderItem tem:

• Order
  •Shipment
   •Terminal
  •OrderItem[]
•Product
DEPOIS
public   class Package
{
	 	      public   var   id:Number;
	 	      public   var   orderId:Number;
	 	      public   var   orderItemId:Number;
	 	      public   var   status:String;
	 	      public   var   packageBarcode:String;
	 	      public   var   postalBarcode:String;
	 	      public   var   shipWay:String;
	 	      public   var   productName:String;
	 	      public   var   reference:String;
	 	      public   var   date:Date;
	 	      public   var   name:String;
	 	      public   var   address:String;
	 	      public   var   number:String;
	 	      public   var   city:String;
	 	      public   var   country:String;
	 	      public   var   postalCode:String;
	 	      public   var   neighborhood:String;
	 	      public   var   phone:String;
}
ANTES
	   <mx:Box>
	   	 <mx:Canvas>
	   	 	 <mx:HBox>
	   	 	 	 <mx:Canvas>
	   	 	 	 	 <mx:VBox>
	   	 	 	 	 	 <mx:Label text="Hello"/>
	   	 	 	 	 </mx:VBox>
	   	 	 	 </mx:Canvas>
	   	 	 </mx:HBox>
	   	 </mx:Canvas>
	   </mx:Box>
DEPOIS


<mx:Canvas>
	 <mx:Label text="Hello"/>
</mx:Canvas>
ANTES


model.user.name = "Joao"
model.user.abstract = ""
model.user.birthdate = new Date(1988, 04, 26)
model.user.administrator = true
DEPOIS


var user:User = model.user
user.name = "Joao"
user.abstract = ""
user.birthdate = new Date(1988, 04, 26)
user.administrator = true
Dúvidas?
Obrigado!

Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSC