2010-08-12 4 views
6

Potete consigliare articoli, libri e migliori pratiche sulla progettazione di applicazioni Flex? (sia AIR che Web).Flex: come tenere il codice lontano da MXML

Ho letto Creating components and enforcing separation of concerns with Flex e Building components by using code behind.

L'applicazione deve sempre essere avviata sul MXML principale? Non è possibile creare un'istanza della prima vista da una classe ActionScript?

Come aggiungere un gestore al primo MXML e fornire il controllo di flusso ad esso?

Sto provando a scrivere codice zero sui miei file MXML per mantenere la vista disaccoppiata dal codice. È possibile in Flex?

+0

Stai facendo questo per ragioni ideologiche o perché credi davvero che ci sia un vantaggio sostanziale nel piegarsi all'indietro per evitare un compromesso semplice e conveniente? – Robusto

+0

La maggior parte sono domande generali che mi aiutano a guidarmi attraverso la programmazione della GUI Flex. Mi è stato insegnato a mantenere una buona visione del codice disaccoppiato. –

risposta

10

Ho lavorato su alcuni progetti che hanno utilizzato il modello code-behind, che soddisfa molte delle vostre esigenze. In poche parole, si isola il codice dall'MXML creando una classe base ActionScript (MyClassCode.as) e quindi creando un file MXML che eredita dalla classe code-behind (MyClass.mxml). Uno svantaggio è che tutti gli elementi dell'interfaccia utente nel file MXML devono essere dichiarati una seconda volta nella classe code-behind, altrimenti ho trovato che questo è un metodo molto efficace per separare il codice dall'interfaccia utente. Ecco un esempio e alcuni link per ulteriori informazioni:

MyClassCode.as:

package mypackage 
{ 
    import flash.events.MouseEvent; 

    import mx.events.FlexEvent; 

    import spark.components.Button; 
    import spark.components.Group; 

    public class MyClassCode extends Group 
    { 
     public var myButton:Button; 

     public function MyClassCode() 
     { 
      super(); 
      this.addEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete); 
     } 

     private function onCreationComplete(e:FlexEvent):void { 
      this.removeEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete); 
      myButton.addEventListener(MouseEvent.CLICK, onClick); 
     } 

     private function onClick(e:MouseEvent):void { 
      // Do something 
     } 
    } 
} 

MyClass.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mypackage:MyClassCode xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         xmlns:mypackage="mypackage.*"> 
    <s:Button id="myButton"/> 
</mypackage:MyClassCode> 

alcuni link:

http://learn.adobe.com/wiki/display/Flex/Code+Behind

http://ted.onflash.org/2007/02/code-behind-in-flex-2.php

http://blog.vivisectingmedia.com/2008/04/the-flex-code-behind-pattern/

+0

Ecco come faccio di solito le cose. – danjarvis

+0

La frase "in poche parole" ha reso la mia giornata. Continuerò a leggere e codificare in base a questi e molti altri link che ho raccolto sull'argomento. Ulteriori domande saranno pubblicate su SO. Grazie! –

+0

Grande, felice di poterti aiutare! –

1

Paul Williams ha alcuni ottimi articoli ed esempi su diversi modelli di presentazione per Flex. Ha persino creato un'applicazione di esempio utilizzando ciascuno dei diversi pattern e ha mostrato come testare alcuni dei pattern unitari. http://blogs.adobe.com/paulw/

Dai un'occhiata al modello Passive View, potrebbe essere quello che stai cercando in termini di scrittura di codice AS nel tuo MXML.

+0

Grande risorsa, grazie! –

2

Le best practice sono molto soggettive nello sviluppo del software. Se trovi una persona che dice "X", posso trovare un altro che dice "Y" e molto probabilmente entrambi avrebbero ragione nelle circostanze date.

La maggior parte dei libri di cui sono a conoscenza si concentra sul portare i principianti a una velocità maggiore rispetto alle migliori pratiche.

Per rispondere alle vostre domande specifiche:

L'applicazione ha sempre avvio sul MXML principale?non è possibile istanziare la prima vista da una classe ActionScript ?

In teoria, sembra che sia possibile avere ActionScript il file dell'applicazione principale; dopo tutto il compilatore Flex trasforma MXM in ActionScript. In pratica, non ho mai visto nessuno farlo. Ho visto applicazioni che sono tutte ACtionSCript ad eccezione del tag dell'applicazione nel file dell'applicazione principale.

Come ti aggiungere un gestore per la prima MXML e dare il controllo del flusso ad esso?

Cosa intendi per gestore e controllo di flusso? Non sono sicuro di avere una risposta specifica qui. Un sacco di persone fanno uso di quadri. Cairngorm è il più usato, ma alcuni lo trovano eccessivamente complicato. Per un po 'il compagno era il favorito della comunità. RobotLegs è il preferito corrente.

Sto cercando di scrivere il codice zero sul mio file MXML per mantenere la vista disaccoppiato dal codice. È possibile in Flex?

Dipende. La vista non è anche il codice? Se si desidera utilizzare un approccio di stile "Model View Controller", ci sono molti modi. I quadri possono aiutare e ne ho menzionato alcuni sopra. Ma potresti anche farcela da sola. Se sei nuovo su Flex ti consiglio di iniziare lo sviluppo "Frameworkless" e di portare i framework nell'equazione per vedere se aiutano a risolvere i problemi che incontri.