Packages. En As 2.0 tu ponias core.package.Miclass{...} La declaracion package ha sido agregada al lenguage asi q deberas incluirla para indicar el package al que pertenecen tus clases, asi package core.package.Miclass {...} Por convecion (no necesariamente) los nombres de los packages deben tener la siguiente estructura. El nombre del dominio de la aplicación seguido por un punto, seguido por el nombre de la marca o compañía seguido, (si se requiere el nombre del proyecto debe ir aquí) punto, después por el nombre general del propósito del Package. Por ejemplo, un package que contiene las clases para la comunicación con los webservices de tu api sería el siguiente. com.proyect-name.wsdlcom com.proyect-name.ws.wsdlcom ___________________________________________________________________________________________ Componentes. Un componente es un modulo adicional que debe de proporcionar una funcionalidad a la aplicación residente. Una consideración de diseño y arquitectura cuando se crea un componente MXML es la reusabilidad. Esto es, quieres crear un componente que este estrechamente unido a tu aplicación o crear uno reutilizable en múltiples aplicaciones?. Las mejores prácticas para definir componentes que regresan información a la aplicación es diseñar el componente mxml para despachar eventos que contengan dicha información. De esta manera la aplicación principal puede definir un event listener para manejar el evento y tomar la acción apropiada. (2) ¿La aplicación o el componente? En el diseño de componentes surgen las siguientes preguntas. * ¿Es necesario desarrollar el componente, porque? , * ¿Quién debe manejar esta funcionalidad el componente o la aplicación? Puede haber mil y un opiniones sobre lo anterior todas se respetan, sin embargo IMHO durante mi experiencia en el desarrollo de aplicaciones web & software he aprendido q.. * Es necesario desarrollar tu componente cuando existe una funcionalidad q sera usada posteriormente en tu proyecto u otro, recuerdas cuando te preguntabas ¿pero para que uso una función, si asi jala bien? jeje, ps ahi tienes. * Cuando se llega a esta pregunta posiblemente no se ha tenido un buen diseño previo, pero si la duda surge es posible contestar a esta pregunta haciendote otras.. podria mi componente existir fuera de mi actual aplicacion??,que tanto tendria que modificar mi code para hacerlo funcionar. cuando se contestan estas simples preguntas puedes llegar a la conclusinon de que tu componente estaba por demas ligado a tu aplicacion (high coupling) o funciona perfectamente con poco o nade de cambios en cualquier otro lado, asi q por ultimo ¿le delegas otro funcionamiento a tu app o al componente? . ___________________________________________________________________________________________ Variables Las variables se nombrarán usando la nomenclatura Camel Case, y deberán usarse varias palabras para nombrarlas cuando una sola no sea suficiente para describir con claridad su función. Las variables se declaran al inicio de la clase, en el orden Bindable, Públicas, Privadas [Bindable] public var datFechaVencimiento:Date public var numSucursal:Number private var _numContrato:Number Las variables se nombrarán utilizando un prefijo que especifique su origen y su tipo. Las tres primeras letras irán en minúsculas y especifican el tipo de dato. Si la variable es de un tipo complejo o un componente, se utilizarán cuatro o cinco letras. Parámetros de funciones: $ Variables privadas: _ [Bindable] public var dgridHabilidades:DataGrid; public var cboxEstadoCivil:ComboBox; private var _txtinComentario:TextInput private var _panelPrincipal:Panel; private var _numEdad:Number; private var _bolCasado:Boolean; _numEdad = (Number)($strEdad); _bolCasado = !$bolSoltero; Las constantes deberán ir en mayúsculas, y en caso de tener varias palabras, separarse por guión bajo. ej. Alert.OK Event.ENTER_FRAME ErrorEvent.ERROR Se recomienda altamente no usar el valor de una constante directamente en lugar de la constante en si,incluso si se conoce el valor, dado q este podria cambiar en versiones futuras. ej. Alert.NONMODAL es una constante definida en Alert.as y su valor es (al dia del post) 0×8000; Alert.show(”Algo muy importante acaba de pasar”,”Error”,Alert.NONMODAL); //correcto Alert.show(”Algo muy importante acaba de pasar”,”Error”,0×8000); //incorrecto ___________________________________________________________________________________________ Funciones En Actionscript 3.0, ahora es posible asignar valores a los parametros formales de tus methodos. ej. private function setSomething(value:int=10){} Las funciones deberán contener un breve comentario sobre el trabajo que desempeñan, al igual que su nombre y sus variables. /** returns the difference between 2 dates
valid dateParts: s: Seconds n: Minutes h: Hours d: Days m: Months y: Years */ public static function dateDiff(datePart:String, date1:Date, date2:Date):Number{ return getDatePartHashMap()[datePart.toLowerCase()](date1,date2); } Siempre siempre siempre indica explicitamente el tipo de retorno asi como tambien el modificador de acceso del methodo, default acces es ahora iternal en lugar de public. Aquellas funciones que se invocan exclusivamente al realizarse una acción o evento, llevarán el nombre de dicha acción antecedido del prefijo do (no necesariamente do, pero procura poner un identificador para diferenciarlos de tus otros methodos y funcs.): private function _doCreationComplete():void{} public function doItemDoubleClick():Number{} Llevarán la misma nomenclatura que las variables, utilizando un prefijo de acuerdo a la acción que ejercen: get: devuelve el valor de una variable, cálculo, estado o propiedad. public function getEdad():Number{ }; Implícitamente. Private var _i:Number; public function get i ():Number{ return _i; //trace(this.i); //set: modifica el valor de una variable, estado o propiedad. public function setSkills($arraySkills:ArrayList) Implícitamente. public function set i(num:Number):void{ if(num<99) this._i=num; //prevenir por ejemplo que nunca valga 100 o mas } ___________________________________________________________________________________________ Eventos Los eventos permiten al programador saber cuando el usuario interactúa con la interface, y también cuando cambios importantes ocurren en la apariencia o ciclo de vida de un componente, como la creación o destrucción de un componente, eliminación de un dato de una grilla. Esta sección describe como deben manejarse dichos eventos. Ahora los delegates, vienen incluidos dentro del lenguage haciendo el despatch de eventos mas facil. mx.utils.Delegate class si no mal recuerdo iva mas o menos asi. //asco import mx.utils.Delegate; miObjetoMuyInteresante.addEventListener("click", Delegate.create(this, onClick)); Ahora en ActionScript 3.0, una referencia de la instancia es automaticamente recordada de donde fue extraida, a esto se le llama ‘method closure‘ , asi q queda mas simple y bonito : miObjetoMuyInteresante.addEventListener("click", onClick); Los eventos de una aplicación deben ser declarados al inicio de esta así como también sus Handlers (manejadores) explicando cuando y porque se usara. Ejemplo. /* *Evento lanzado cuando se elimino un ítem del grid, catch arriba para eliminar por ws. */ [Event (name='onDeleteItemCartasPago', type='flash.events.Event')] Manejo de eventos. EL manejo de eventos en as3 es muy simple y puede hacerse de la siguiente manera: Implementando un listener indicando implícitamente el nombre del evento a catchar. addEventListener('onDelete',function($e:Event){ //algo muy interesante aqui. }); Del codigo. Evitar dar por seguro la existencia o valor de variables. Ejemplo Function foo(){ Alert.show(StringUtil.trim(algo.toString()); } Es desaconsejado usar el wildcard ‘*’ para especificar un tipo de dato. Dado que el casting se realizara en tiempo real (on fly), su uso excesivo puede aumentar el tiempo de respuesta de la película.Una última revisión a tu codigo podría arrojar que algunos imports jamás fueron usados. Xd. fu.wire@gmail.com.