Zobrazují se příspěvky se štítkemflex. Zobrazit všechny příspěvky
Zobrazují se příspěvky se štítkemflex. Zobrazit všechny příspěvky

10. dubna 2012

Flex, pár drobností

Při studiu na nedávnou Flexovou certifikaci jsem se musel poměrně hodně hluboko ponořit do Flexové dokumantace. A to jak do reference ActionScriptu, tak do konceptů a architektury samotného Flexu Using Flex. Důvod byl jednoduchý - nedostatek praxe jsem musel nahradit porozuměním.

Protože se mi architektura Flexu líbíla, rád bych se k němu vrátil a pro ten případ si tady chci zaarchivoval pár věcí, které mne zaujaly.

Bidirectional binding
Pokud chci mít obousměrné datové propojení dvou komponent, mám k dispozici tři způsoby. Buď je vzájemně provázat jednosměrným bindingem:
<s:TextInput id="input1" text="{input2.text}"/>
<s:TextInput id="input2" text="{input1.text}"/>
Nebo na zdroji říct, že propojení je obousměrné pomocí znaku zavináče (@):
<s:TextInput id="input1" text="@{input2.text}"/>
<s:TextInput id="input2"/>
Anebo použít tag <fx:Binding> s nastavenou twoWay property:
<fx:Binding source="input1.text"
            destination="input2.text"
            twoWay="true"/>

Event flow
Flex je framework postavený mmj. na Even-driven architekturě. Události zde proto hrají jednu z ústředních rolí. Pokud je na nějakém komponentu spuštěna (triggered) událost, má Flex definovány tři fáze, během kterých zjišťuje, zda události naslouchají nějaký event  listeneři:

Tři fáze event flow
  1. Capturing Phase probíhá od kořenového uzlu (root node) komponentového stromu až k rodičovskému uzlu cílového komponentu (target node). Na obrázku Application -> Group -> Panel. Flash Player na každém uzlu kontroluje, zda má na spuštěnou událost zaregistrovaný listener, pokud ano, listener zavolá.
  2. Targeting Phase zahrnuje pouze cílový/spouštěcí komponent (target node). Na komponentu jsou zavolány registrovaný listenery.
  3. Bubbling Phase probíhá od rodičovského uzlu cílového komponentu zpět ke kořenovému uzlu. Na obrázku Panel -> Group -> Application. Opět jsou zavolány registrované listenery.
Jak to všechno funguje ukazuje následující kód. V MXML je definován komponentový strom z obrázku (Application -> Group -> Panel -> Button). Ve fázi inicializace (funkce initializeHandler) jsou na komponenty navěšeny listenery, na každý dva - jeden pro fázi capturing, jeden pro fázi bubbling. Zbytek funkcí jsou event handlery, které vypisují text do debug konzole (metoda trace).
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark"
           initialize="initializeHandler(event)">

  <fx:Script>
    <![CDATA[
      import mx.events.FlexEvent;

      protected function clickHandler(
                      event:MouseEvent):void {
        trace("Button has been clicked.");
      }

      protected function groupEventHandler(
                      event:Event):void {
        trace("Event has been dispatched to: "
                        + event.currentTarget);
      }

      protected function panelEventHandler(
                      event:Event):void {
        trace("Event has been dispatched to: 
                        + event.currentTarget);
      }

      protected function buttonEventHandler(
                      event:Event):void {
        trace("Event has been dispatched to: 
                        + event.currentTarget);
      }

      protected function initializeHandler(
                      event:FlexEvent):void {
        group.addEventListener(MouseEvent.CLICK,
                               groupEventHandler,
                               true);
        group.addEventListener(MouseEvent.CLICK,
                               groupEventHandler);
        panel.addEventListener(MouseEvent.CLICK,
                               panelEventHandler,
                               true);
        panel.addEventListener(MouseEvent.CLICK,
                               panelEventHandler);
        button.addEventListener(MouseEvent.CLICK,
                                buttonEventHandler,
                                true);
        button.addEventListener(MouseEvent.CLICK,
                                buttonEventHandler);
      }

    ]]>
  </fx:Script>

  <s:Group id="group">
    <s:Panel id="panel" title="Panel">
      <s:Button id="button"
                label="Button Event"
                click="clickHandler(event)"/>
    </s:Panel>
  </s:Group>

</s:Application>
Po kliknutí na tlačítko Button Event se na debug konzoli vypíše následující výpis (řádky jsou zalomeny). Jednotlivé barvy představují výše popsané fáze.
Event has been dispatched to: Work.ApplicationSkin2
    ._ApplicationSkin_Group1.contentGroup.group
Event has been dispatched to: Work.ApplicationSkin2
    ._ApplicationSkin_Group1.contentGroup.group.panel
Button has been clicked.
Event has been dispatched to: Work.ApplicationSkin2
    ._ApplicationSkin_Group1.contentGroup.group.panel
    .PanelSkin7._PanelSkin_Group1.contents
    .contentGroup.button
Event has been dispatched to: Work.ApplicationSkin2
    ._ApplicationSkin_Group1.contentGroup.group.panel
Event has been dispatched to: Work.ApplicationSkin2
    ._ApplicationSkin_Group1.contentGroup.group

HTTPService
Pro zaslání HTTP requestu a příjem odpovědi na/z nějaké URL obsahuje Flex třídu HTTPService. Třída funfuje asynchronně - metodou send() se odešle request a události result se nastaví handler, který zpracuje response. Celé je to jednoduché a elegantní:
<fx:Script>
  <![CDATA[
    import mx.rpc.events.ResultEvent;

    protected function init():void {
      categoryService.send();
    }

    protected function resultHandler(
                            event:ResultEvent):void {
      trace(event.result);
    }
  ]]>
</fx:Script>
<fx:Declarations>
  <s:HTTPService id="categoryService"
         url="http://www.flexgrocer.com/category.xml"
         resultFormat="e4x"
         result="resultHandler(event)"/>
</fx:Declarations>

23. března 2012

Flex certifikace

Dnes jsem úspěšně absolvoval certifikaci Flex 4.5 ACE Exam (Adobe Certified Expert). Protože se živím hlavně jako Java vývojář a solution architect, bylo to pro  mne odskočení do celkem neznámých  vod. Nicméně šel jsem do toho hlavně ze dvou důvodů - jednak z pohledu architekta, bylo pro mne zajímavé poznat novou RIA platformu a druhak, Flex je občas požadován našimi zákazníky jako frontendová technologie (což souvisí i s prvním důvodem, protože dělám i nabídky) a doposud jsme na Flex nabírali externí programátory, takže mít Flexové znalosti se hodí i jako interní kompetence.

Certifikace samotná splnila mé očekávání. Vypíchnul bych hlavně věc související s vnitřní motivací - témata a rozsah certifikace mne přinutily podívat se na Flex platformu/architekturu opravdu do hloubky, takže myslím, že Flex znám na celkem slušné úrovni. Hlavní přínosy bych shrnul do třech bodů:

  • Architektura Flexu se mi velmi líbí. Je to pěkně čistě napsaná Event-Driven Architecture (mám z ní lepší pocit než třeba ze Swingu v Javě). Layout komponent se primárně řeší v MXML, pro nevizuální nebo složitější komponenty slouží ActionScript.
  • ActionScript (implementace ECMAScriptu) je pěkný jazyk, takový lepší JavaScript. Příjemně se v něm píše.
  • Flash Builder je slušné IDE postavené na Eclipse. Oproti Java pluginům/prostředí má ještě co dohánět (hlavně refactoring a content assist), ale na projektu bych ho rád použil. Škoda, že je komerční (Standard edice za $249).

No a teď k samotné certifikaci. Struktura zkoušky je následující:

  • Creating a User Interface (UI)
  • Flex system architecture and design
  • Programming Flex application with ActionScript
  • Interacting with data sources and servers
  • Using Flex in Adobe Integrated Runtime (AIR)

Oproti jiným certifikacím jsem použil docela dost materiálů. Mezi ty které bych určitě doporučil patří výborná kniha Adobe Flex 4.5 Fundamentals. Kniha je skvěle napsaná a poskytuje základní kontext a úvod do Flexu. Chybí v ní pokročilejší témata, jako třeba remoting nebo AIR.

Dalším výborným zdrojem je samotná dokumentace k Flexu, zejména Using Flex a ActionScript Reference. Je toho hodně, takže napomůže drobná selekce pomocí Attest, přípravném test kitu pro Flex 4 certifikaci, napsaném v AIR.

Dále bych doporučil stáhnout si (2měsíční) zkušební verzi Flash Builderu a prostě v něm programovat - kniha Adobe Flex 4.5 Fundamentals má výborný příklad - postupné budování web shopu. Kromě toho jsem si naprogramoval spoustu snipetů, maličkých aplikací třeba jenom na jednotlivé komponenty, např. toto na vícenásobný binding:
<?xml version="1.0" encoding="utf-8"?>
<s:Application
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark">

    <s:layout>
        <s:HorizontalLayout/>
    </s:layout>

    <fx:Binding source="first.text"
                destination="destination.text"/>
    <fx:Binding source="second.text"
                destination="destination.text"/>

    <s:VGroup>
        <s:TextInput id="first"/>
        <s:TextInput id="second"/>
        <s:Label id="destination"/>
    </s:VGroup>

    <fx:Binding source="source.text"
                destination="primero.text"/>
    <fx:Binding source="source.text"
                destination="segundo.text"/>

    <s:VGroup>
        <s:TextInput id="source"/>
        <s:Label id="primero"/>
        <s:Label id="segundo"/>
    </s:VGroup>

</s:Application>
Co bych doporučil méně (ale považuji také za přínosné) je jednak kniha Flex 4 in Action. Není to špatná knížka, oproti té výše uvedené je dosti ukecaná. Na druhou stranu obsahuje některé pokročilejší témata, např. letmá zmínka o BlazeDS.

Vyloženě špatný také není preparation kit od uCertify, který ale nepokrývá všechna témata zkoušky (nejspíš to připravovali na nějaké betě :-/ Určitě ho ale lze použít jako doplňující materiál.

Na závěr jsem si nechal lahůdku - aneb před čím bych důrazně varoval. Rozhodně se vyhnout produktům firmy Pass4sure!!! Otřesná kvalita, chyby, hrozný!!! V 60 otázkách jsem napočítal 12 zcela jasně chybných "správných" odpovědí a u pár dalších si myslím, že je měli taky špatně. Otřesný.

Kromě výše zmíněných materiálů, které jsem si nechal koupit od firmy, jsem v průběhu učení se "objevil" OneNote, do kterého jsem si začal "psát" poznámky ke zkoušce. Protože jsem si je ale začal psát až v průběhu, jsou nekompletní, nicméně třeba to někomu pomůže:

Příprava na Flex certifikaci (PDF)