2010-08-12 15 views
6

¿Puede recomendar artículos, libros y mejores prácticas sobre el diseño de aplicaciones Flex? (tanto AIR como web).Flex: cómo mantener el código fuera de MXML

He leído y Creating components and enforcing separation of concerns with FlexBuilding components by using code behind.

¿La aplicación siempre debe iniciarse en el MXML principal? ¿No puedo crear una instancia de la primera vista desde una clase de ActionScript?

¿Cómo agregaría un controlador al primer MXML y le daría el control de flujo?

estoy tratando de escribir código cero en mis archivos MXML para mantener la vista desacoplada de código. ¿Es esto posible en Flex?

+0

¿Está haciendo esto por razones ideológicas o porque realmente cree que hay un beneficio sustancial en hacer todo lo posible para evitar un compromiso simple y conveniente? – Robusto

+0

La mayoría son preguntas generales que me ayudan a guiarme a mí mismo a través de la programación de Flex GUI. Me enseñaron que mantener la vista desde el código desacoplado es bueno. –

Respuesta

10

He trabajado en algunos proyectos que han utilizado el patrón de código subyacente, que cumple con muchos de sus requisitos. En resumen, aísla el código del MXML creando una clase base de ActionScript (MyClassCode.as) y luego creando un archivo MXML que hereda de la clase de código subyacente (MyClass.mxml). Una desventaja es que cualquier elemento de la interfaz de usuario en el archivo MXML debe declararse por segunda vez en la clase de código subyacente, de lo contrario, he encontrado que este es un método muy eficaz para separar el código de la interfaz de usuario. He aquí un ejemplo y algunos enlaces para obtener más información:

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> 

Algunos enlaces:

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

Así es como suelo hacer las cosas. – danjarvis

+0

La frase "en pocas palabras" me alegró el día. Seguiré leyendo y codificando según estos y otros enlaces que he recopilado sobre el tema. Se publicarán más preguntas en SO. Gracias! –

+0

¡Genial, me alegro de poder ayudar! –

1

Paul Williams tiene excelentes artículos y ejemplos sobre diferentes patrones de presentación para Flex. Incluso construyó una aplicación de muestra usando cada uno de los diferentes patrones y mostró cómo probar algunos de los patrones. http://blogs.adobe.com/paulw/

Eche un vistazo al modelo de vista pasiva, puede ser lo que está buscando en términos de escribir ningún código AS en su MXML.

+0

¡Gran recurso, gracias! –

2

Las mejores prácticas son muy subjetivas en el desarrollo de software. Si encuentras a una persona que dice "X", puedo encontrar a otra que diga "S" y es probable que ambos tengan razón en las circunstancias dadas.

La mayoría de los libros que estoy al tanto de enfoque en traer los principiantes a la velocidad, a diferencia de las mejores prácticas.

Para responder a sus preguntas específicas:

que hace la aplicación, siempre hay que inicio en el MXML principal? ¿No puedo crear una instancia de la primera vista de una clase de ActionScript ?

En teoría, parece que debería ser posible que el archivo de la aplicación principal sea ActionSCript; después de todo, el compilador de Flex simplemente convierte MXM en ActionSCript. En la práctica, nunca he visto a nadie hacer esto. He visto aplicaciones que son todas ACtionSCript a excepción de la etiqueta de la aplicación en el archivo principal de la aplicación.

¿Cómo le agregue un controlador a la primera MXML y darle el control de flujo a ella?

¿Qué quiere decir con controlador y control de flujo? No estoy seguro de tener una respuesta específica aquí. Mucha gente hace uso de marcos. Cairngorm es el más utilizado, pero a algunos les resulta demasiado complicado. Durante un tiempo, Mate fue el favorito de la comunidad. RobotLegs es el favorito actual.

Estoy tratando de escribir código cero en mis archivos MXML para mantener la vista desacoplada de código. ¿Es esto posible en Flex?

Depende. ¿No es la vista también el código? Si desea utilizar un enfoque de Estilo de "Controlador de vista de modelo", hay muchas maneras. Los marcos pueden ayudar y mencioné algunos más arriba. Pero, también puedes ir por tu cuenta. Si eres nuevo en Flex, te recomiendo que comiences tu desarrollo "Frameworkless" y traigas marcos a la ecuación para ver si te ayudan a resolver los problemas con los que te encuentras.

Cuestiones relacionadas