<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MadeInFlex &#187; Casos de uso</title>
	<atom:link href="http://www.madeinflex.com/categoria/casos-de-uso/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.madeinflex.com</link>
	<description>Creando Soluciones RIA...</description>
	<lastBuildDate>Wed, 30 Nov 2011 16:04:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Air &amp; JasperReports</title>
		<link>http://www.madeinflex.com/2010/03/10/air-jasperreports/</link>
		<comments>http://www.madeinflex.com/2010/03/10/air-jasperreports/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 12:02:52 +0000</pubDate>
		<dc:creator>David Junyent</dc:creator>
				<category><![CDATA[Casos de uso]]></category>

		<guid isPermaLink="false">http://www.madeinflex.com/?p=1225</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->Este es un ejemplo para lanzar un reporte JasperReports con una aplicación Air utilizando el proyecto Merapi (AIR&#8217;s Java Bridge).
Encontrareis el ejemplo en este link, en el  .zip  encontrareis los dos proyectos, para probar-lo solo hay que ejecutar el airReports.java y el aiReports.mxml.]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>Este es un ejemplo para lanzar un reporte JasperReports con una aplicación Air utilizando el proyecto Merapi (<a href="http://code.google.com/p/merapi/">AIR&#8217;s Java Bridge</a>).</p>
<p>Encontrareis el ejemplo en este <a href="http://sourceforge.net/projects/airreports/">link</a>, en el  .zip  encontrareis los dos proyectos, para probar-lo solo hay que ejecutar el airReports.java y el aiReports.mxml.</p>]]></content:encoded>
			<wfw:commentRss>http://www.madeinflex.com/2010/03/10/air-jasperreports/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GeoStratum 2.0</title>
		<link>http://www.madeinflex.com/2010/01/02/geostratum-2-0/</link>
		<comments>http://www.madeinflex.com/2010/01/02/geostratum-2-0/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 17:21:11 +0000</pubDate>
		<dc:creator>Carlos Rovira</dc:creator>
				<category><![CDATA[Casos de uso]]></category>

		<guid isPermaLink="false">http://www.madeinflex.com/?p=1076</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->Nos complace presentar un nuevo producto para nuestra sección de Casos de Uso. Se trata de GeoStratum 2.0, un nuevo producto RIA de ultimísima generación basado en Flex y Java y construido sobre la plataforma avanzada de producción RIA llamada RIAlity. Ambos productos, GeoStratum y RIAlity son obra de Codeoscopic.













GeoStratum es un sistema de información [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>Nos complace presentar un nuevo producto para nuestra sección de <a href="http://www.madeinflex.com/categoria/casos-de-uso/">Casos de Uso</a>. Se trata de <strong>GeoStratum 2.0</strong>, un nuevo producto <strong>RIA</strong> de ultimísima generación basado en <strong>Flex</strong> y <strong>Java</strong> y construido sobre la plataforma avanzada de producción RIA llamada <a href="http://www.madeinflex.com/2008/11/03/arquitecturas-avanzadas-flexjee-riality/">RIAlity</a>. Ambos productos, <strong>GeoStratum</strong> y <strong>RIAlity</strong> son obra de <a href="http://www.codeoscopic.com">Codeoscopic</a>.</p>
<div align="center">
<object width="400" height="200">
<param name="movie" value="http://www.youtube.com/v/zOwXuNSJm_U&amp;rel=0&amp;showsearch=0&amp;fs=1"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowFullScreen" value="true"></param>
<embed type="application/x-shockwave-flash" width="400" height="200" src="http://www.youtube.com/v/zOwXuNSJm_U&amp;rel=0&amp;showsearch=0&amp;fs=1" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" allowFullScreen="true" ></embed>
</object>
</div>
<p></p>
<p><span id="more-1076"></span></p>
<p><strong>GeoStratum</strong> es un sistema de información basado en un visor cartográfico sobre el que podemos desarrollar diferentes aplicaciones basadas en visualización georeferenciada.</p>
<p>La <strong>usabilidad</strong> de una aplicación de estas características alcanza niveles excelentes gracias a la sencillez de navegación, basada principalmente en clicks y movimientos del ratón, en contraposición a los típicos formularios de las aplicaciones de gestión tradicionales y la exposición de la información de foma espacial sobre localizaciones geográficas en vez de las tablas de datos normales en estos casos.</p>
<p>Este es sin duda un buen ejemplo de aplicación <strong>RIA</strong>, desarrollada sobre <strong>Flex</strong> y <strong>JEE</strong>, por uno de los equipos de producción de <strong>Codeoscopic</strong>. El concepto principal detrás del producto es el poder extender la base <strong>GIS</strong> para añadir información propia de un negocio concreto. En ese aspecto, <strong>GeoStratrum 2.0</strong> es la herramienta apropiada para gestionar infraestructuras de suministro (agua, electricidad, etc), planes urbanísticos, líneas de transporte (metro, autobus,...), servicios de logística, polígonos industriales, parques naturales, etc...</p>]]></content:encoded>
			<wfw:commentRss>http://www.madeinflex.com/2010/01/02/geostratum-2-0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Subir ficheros con Flex y un servlet de Java</title>
		<link>http://www.madeinflex.com/2009/11/01/subir-ficheros-con-flex-y-un-servlet-de-java/</link>
		<comments>http://www.madeinflex.com/2009/11/01/subir-ficheros-con-flex-y-un-servlet-de-java/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 21:04:13 +0000</pubDate>
		<dc:creator>David Junyent</dc:creator>
				<category><![CDATA[Casos de uso]]></category>
		<category><![CDATA[flex upload servlet]]></category>

		<guid isPermaLink="false">http://www.madeinflex.com/?p=1004</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->Este es un sencillo ejemplo para llamar un servlet desde flex, el proyecto lo he creado con un Eclipse java-jee combinado con el plugin del Flex Builder 3.
Para importar el proyecto, en el Flex Builder  hay que selccionar File/Import/Flex Project y selccionar este fichero.]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>Este es un sencillo ejemplo para llamar un servlet desde flex, el proyecto lo he creado con un Eclipse java-jee combinado con el plugin del Flex Builder 3.</p>
<p>Para importar el proyecto, en el Flex Builder  hay que selccionar File/Import/Flex Project y selccionar este <a style="text-decoration: none; color: #6dcff6;" href="https://sourceforge.net/projects/flexupload/">fichero</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.madeinflex.com/2009/11/01/subir-ficheros-con-flex-y-un-servlet-de-java/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Flex/Java Excelente combinación para RIAs</title>
		<link>http://www.madeinflex.com/2008/07/15/flex-java-excelente-combinacion-para-aplicaciones-ria/</link>
		<comments>http://www.madeinflex.com/2008/07/15/flex-java-excelente-combinacion-para-aplicaciones-ria/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 23:49:32 +0000</pubDate>
		<dc:creator>Kibsaim Vindas L.</dc:creator>
				<category><![CDATA[Casos de uso]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.madeinflex.com/2008/07/15/flex-java-excelente-combinacion-para-aplicaciones-ria/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->Ya es por todos muy conocido la excelente integración que existe entre las tecnologías Java/Flex.
Generalmente, apreciamos la tecnología Flex en aplicaciones de poco utilización, o utilización complementaria, en forma de multimedia interactivas asociadas a páginas web o aplicaciones enfocadas a tareas pequeñas, como configurar un producto X, o un buscador de propiedades, etc.
Aún y cuando [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>Ya es por todos muy conocido la excelente integración que existe entre las tecnologías Java/Flex.</p>
<p>Generalmente, apreciamos la tecnología Flex en aplicaciones de poco utilización, o utilización complementaria, en forma de multimedia interactivas asociadas a páginas web o aplicaciones enfocadas a tareas pequeñas, como configurar un producto X, o un buscador de propiedades, etc.</p>
<p>Aún y cuando la tecnología Flex tiene infinidad de posibilidades, pocas veces la podemos observar en aplicaciones robustas, que requieran de un uso diario y periódico por parte de sus usuarios y con grandes volúmenes de datos, tablas y objetos, como sí visualizamos aplicaciones Swing o Web.</p>
<p>Hace aproximadamente 1.5 años nos embarcamos en la aventura de desarrollar una aplicación tipo ERP llamada <a href="http://www.alivebox.com/es/producto-kinetik-inicio.html" title="KINETIK" target="_blank">KINETIK-ERP</a>, sobre arquitecturas Java/Flex, y hasta el momento la combinación de ambas tecnologías ha sido todo un éxito, tanto en la parte técnica, como en la parte funcional y de usabilidad, ambas tecnologías se han integrado de una forma completamente natural.</p>
<p>En el inicio de este proyecto, valoramos varias tecnologías para realizar la parte Cliente, entre estas se encontraban OpenLaszlo, Flex y Swing. Luego de varias pruebas y analizar el ambiente particular de cada tecnología, descartamos OpenLaszlo y Swing. En general, OpenLaszlo en ese momento estaba muy verde y aún cuando sé que muchos amantes de Swing puedan decir lo contrario, Swing no termina de parecerme una tecnología de arquitectura muy pesada y rígida en muchos sentidos.</p>
<p>Actualmente, <a href="http://www.alivebox.com/es/producto-kinetik-inicio.html" title="KINETIK-ERP" target="_blank">KINETIK-ERP</a> consta de más 16000 líneas java y más de 5000 líneas Flex. La arquitectura de la aplicación en la parte servidor consta de las tecnologías Java/Spring/Hibernate/Acegi/JasperReports y GraniteDS. En la parte de cliente, la aplicación esta implementada sobre Flex/Cairngorm/Modules, más innumerables clases que hemos desarrollo de nuestra parte.</p>
<p>Durante este proceso, nuestro aprendizaje ha sido constante, y hemos tenido que ir solucionando algunos baches de integración entre ambas tecnologías, que no se encuentran completamente satisfechos a la actualidad, pero en general nuestra experiencia ha sido muy positiva.</p>
<p>Algunos problemas de integración que hemos ido solucionando son:</p>
<ul>
<li>Integración, manejo y vencimiento de la sesión Web.</li>
<li>Optimizaciones de comunicación entre plataformas.</li>
<li>Integración de Flex con JasperReports.</li>
<li>Reportes Dinámicos.</li>
</ul>
<p>En resumen y basado en nuestra experiencia, les recomiendo el uso e integración de ambas tecnologías.</p>
<p>A continuación un link de nuestra aplicación con el fin que puedan observar nuestro trabajo.</p>
<p><a href="http://www.alivebox.com/es/producto-kinetik-inicio.html" title="KINETIK-ERP" target="_blank">KINETIK - ERP</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.madeinflex.com/2008/07/15/flex-java-excelente-combinacion-para-aplicaciones-ria/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cairngorm: Secuenciado de Commands</title>
		<link>http://www.madeinflex.com/2007/09/07/cairngorm-secuenciado-de-commands/</link>
		<comments>http://www.madeinflex.com/2007/09/07/cairngorm-secuenciado-de-commands/#comments</comments>
		<pubDate>Thu, 06 Sep 2007 23:08:00 +0000</pubDate>
		<dc:creator>Joan Garnet</dc:creator>
				<category><![CDATA[Cairngorm]]></category>
		<category><![CDATA[Casos de uso]]></category>

		<guid isPermaLink="false">http://www.madeinflex.com/2007/09/07/cairngorm-secuenciado-de-commands/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->En según qué ocasiones podemos requerir que nuestra aplicación ejecute una serie de  Commands de forma asíncrona siguiendo un órden determinado.
Cairngorm viene de serie con la capacidad de encadenar Commands asíncronamente. La clase com.adobe.cairngorm.commands.SequenceCommand es la que se ocupa de que esto sea posible.
En esta entrada veremos dos formas de implementar el secuenciado. Una [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>En según qué ocasiones podemos requerir que nuestra aplicación ejecute una serie de  Commands de forma asíncrona siguiendo un órden determinado.<br />
<a href="http://www.madeinflex.com/2006/10/15/cairngorm-i-introduccion/">Cairngorm</a> viene de serie con la capacidad de encadenar Commands asíncronamente. La clase <strong>com.adobe.cairngorm.commands.SequenceCommand</strong> es la que se ocupa de que esto sea posible.<br />
En esta entrada veremos dos formas de implementar el secuenciado. Una de forma estática y la otra de forma dinámica.</p>
<p><span id="more-482"></span></p>
<div class="toc">
<ol>
<li><a href="http://www.madeinflex.com/2007/09/07/cairngorm-secuenciado-de-commands/#toc-encadenado-estatico">Encadenado estático</a></li>
<li><a href="http://www.madeinflex.com/2007/09/07/cairngorm-secuenciado-de-commands/#toc-encadenado-dinamico">Encadenado dinámico</a></li>
<li><a href="http://www.madeinflex.com/2007/09/07/cairngorm-secuenciado-de-commands/#toc-proyectos-de-ejemplo">Proyectos de ejemplo</a></li>
</ol>
</div>
<h2 id="toc-encadenado-estatico">Encadenado estático</h2>
<p>De forma nativa Cairngorm soporta encadenado estático de Commands, esto significa que para una secuencia dada deberemos crear una serie de Commands exclusiva para ésta.<br />
El principal problema que se nos puede plantear en este caso es que si queremos reutilizar un Command que ya forma parte de una secuencia no podremos. Nos veremos forzados a duplicar código.<br />
La causa de este problema viene del hecho que la clase SequenceCommand, la clase de la que extienden nuestros Commands a secuenciar, utiliza una propiedad <strong>nextEvent</strong> que es la que decide cuál es el siguiente Evento (y por consiguiente Command) que se va a ejecutar. La forma en la que los Commands son lanzados hace que sea imposible parametizar esta propiedad y por lo tanto se mantega estática.</p>
<p>Un ejemplo de un Command que forma parte de una secuencia:</p>
<p><b>HolaCommand.as (ejemplo estático)</b></p>
<div class="igBar"><span id="lactionscript3-5"><a href="#" onclick="javascript:showPlainTxt('actionscript3-5'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript 3:</span>
<div id="actionscript3-5">
<div class="actionscript3">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #9900cc; font-weight: bold;">package</span> com.madeinflex.command</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> com.adobe.cairngorm.commands.ICommand;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> com.adobe.cairngorm.commands.SequenceCommand;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> com.adobe.cairngorm.control.CairngormEvent;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> com.madeinflex.event.MundoEvent;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> mx.controls.Alert;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> mx.events.CloseEvent;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> HolaCommand <span style="color: #0033ff; font-weight: bold;">extends</span> SequenceCommand implements ICommand</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> HolaCommand<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nextEvent = <span style="color: #0033ff; font-weight: bold;">new</span> MundoEvent<span style="color: #000000;">&#40;</span> MundoEvent.MOSTRAR_MUNDO <span style="color: #000000;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">override</span> <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> execute<span style="color: #000000;">&#40;</span> evt:CairngormEvent <span style="color: #000000;">&#41;</span>:<span style="color: #0033ff; font-weight: bold;">void</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Alert.<span style="color: #004993;">show</span><span style="color: #000000;">&#40;</span> <span style="color: #990000;">"Hola"</span>, <span style="color: #990000;">"HolaCommand"</span>, Alert.OK, <span style="color: #0033ff; font-weight: bold;">null</span>, onClose <span style="color: #000000;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> onClose<span style="color: #000000;">&#40;</span> evt:CloseEvent <span style="color: #000000;">&#41;</span>:<span style="color: #0033ff; font-weight: bold;">void</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; executeNextCommand<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h2 id="toc-encadenado-dinamico">Encadenado dinámico</h2>
<p>El encadenado dinámico es mucho más flexible que el estático dado que permite crear de forma dinámica las secuencias de Commands, de este modo podremos reutilizar un mismo Command para formar parte de diferentes secuencias o para ser lanzado individualmente.<br />
Para conseguir este objetivo nos vamos a servir de una <a href="http://cairngormdocs.org/blog/?p=27">colaboración que Bjorn Schultheiss</a> ha hecho al repositorio de recursos para Cairngorm: <a href="http://cairngormdocs.org/">cairngormdocs.com</a>.<br />
Se trata de dos clases: <strong>com.bjorn.event.ChainEvent</strong> y <strong>com.bjorn.event.EventChainFactory</strong>.<br />
La clase ChainEvent es un <em>wrapper</em> de com.adobe.cairngorm.control.CairngormEvent que añade la propiedad <strong>nextChainedEvent:ChainEvent</strong>, y la clase EventChainFactory es la que se ocupa de enlazar dinámicamente las diferentes instancias de eventos que queremos secuenciar. Se le pasa un Array de instancias de ChainEvent y va asignando de mayor a menor (en índice) cual es su <strong>nextEvent</strong>.</p>
<p>Un ejemplo de un Command que se añade dinámicamente a una secuencia, su evento relacionado y la forma de crear la secuencia:</p>
<p><b>HolaCommand.as (ejemplo dinámico)</b></p>
<div class="igBar"><span id="lactionscript3-6"><a href="#" onclick="javascript:showPlainTxt('actionscript3-6'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript 3:</span>
<div id="actionscript3-6">
<div class="actionscript3">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #9900cc; font-weight: bold;">package</span> com.madeinflex.command</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> com.adobe.cairngorm.commands.ICommand;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> com.adobe.cairngorm.commands.SequenceCommand;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> com.adobe.cairngorm.control.CairngormEvent;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> com.bjorn.event.ChainEvent;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> com.madeinflex.event.MundoEvent;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> mx.controls.Alert;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> mx.events.CloseEvent;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> HolaCommand <span style="color: #0033ff; font-weight: bold;">extends</span> SequenceCommand implements ICommand</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">override</span> <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> execute<span style="color: #000000;">&#40;</span> evt:CairngormEvent <span style="color: #000000;">&#41;</span>:<span style="color: #0033ff; font-weight: bold;">void</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nextEvent = ChainEvent<span style="color: #000000;">&#40;</span> evt <span style="color: #000000;">&#41;</span>.nextChainedEvent;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Alert.<span style="color: #004993;">show</span><span style="color: #000000;">&#40;</span> <span style="color: #990000;">"Hola"</span>, <span style="color: #990000;">"HolaCommand"</span>, Alert.OK, <span style="color: #0033ff; font-weight: bold;">null</span>, onClose <span style="color: #000000;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> onClose<span style="color: #000000;">&#40;</span> evt:CloseEvent <span style="color: #000000;">&#41;</span>:<span style="color: #0033ff; font-weight: bold;">void</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; executeNextCommand<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><b>HolaEvent.as (ejemplo dinámico)</b></p>
<div class="igBar"><span id="lactionscript3-7"><a href="#" onclick="javascript:showPlainTxt('actionscript3-7'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript 3:</span>
<div id="actionscript3-7">
<div class="actionscript3">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #9900cc; font-weight: bold;">package</span> com.madeinflex.event</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> com.bjorn.event.ChainEvent;&nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span>.<span style="color: #004993;">Event</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> HolaEvent <span style="color: #0033ff; font-weight: bold;">extends</span> ChainEvent</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> static const MOSTRAR_HOLA:<span style="color: #004993;">String</span> = <span style="color: #990000;">"mostrar_hola"</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> HolaEvent<span style="color: #000000;">&#40;</span> <span style="color: #004993;">type</span>:<span style="color: #004993;">String</span> <span style="color: #000000;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000000;">&#40;</span> <span style="color: #004993;">type</span> <span style="color: #000000;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">override</span> <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">clone</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>:<span style="color: #004993;">Event</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">return</span> <span style="color: #0033ff; font-weight: bold;">new</span> HolaEvent<span style="color: #000000;">&#40;</span> <span style="color: #004993;">type</span> <span style="color: #000000;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><b>Creación dinámico de la secuencia</b></p>
<div class="igBar"><span id="lactionscript3-8"><a href="#" onclick="javascript:showPlainTxt('actionscript3-8'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript 3:</span>
<div id="actionscript3-8">
<div class="actionscript3">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//(...)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> empezarSecuencia1<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>:<span style="color: #0033ff; font-weight: bold;">void</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #6699cc; font-weight: bold;">var</span> evts:<span style="color: #004993;">Array</span> = </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000000;">&#91;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">new</span> HolaEvent<span style="color: #000000;">&#40;</span> HolaEvent.MOSTRAR_HOLA <span style="color: #000000;">&#41;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">new</span> MundoEvent<span style="color: #000000;">&#40;</span> MundoEvent.MOSTRAR_MUNDO <span style="color: #000000;">&#41;</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">new</span> ExclamacionEvent<span style="color: #000000;">&#40;</span> ExclamacionEvent.MOSTRAR_EXCLAMACION <span style="color: #000000;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000000;">&#93;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #6699cc; font-weight: bold;">var</span> chainEvent:ChainEvent = EventChainFactory.chainEvents<span style="color: #000000;">&#40;</span> evts <span style="color: #000000;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; chainEvent.dispatch<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//(...) </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h2 id="toc-proyectos-de-ejemplo">Proyectos de ejemplo</h2>
<p>Incluyo dos proyectos muy simples de ejemplo. Uno para secuenciado estático y otro para secuenciado dinámico:</p>
<div class="files"><a href='http://www.madeinflex.com/img/entries/2007/09/cairngorm_sequencecommand_1.zip' title='Secuenciado estático de Commands'><img src="http://www.madeinflex.com/img/file_icons/zip_file_icon.jpg" alt="Secuenciado estático de Commands" title="Secuenciado estático de Commands" /></a><a href='http://www.madeinflex.com/img/entries/2007/09/cairngorm_sequencecommand_1.zip' title='Secuenciado estático de Commands'>Secuenciado estático de Commands</a></div>
<div class="files"><a href='http://www.madeinflex.com/img/entries/2007/09/cairngorm_sequencecommand_2.zip' title='Secuenciado dinámico de Commands'><img src="http://www.madeinflex.com/img/file_icons/zip_file_icon.jpg" alt="Secuenciado dinámico de Commands" title="Secuenciado dinámico de Commands" /></a><a href='http://www.madeinflex.com/img/entries/2007/09/cairngorm_sequencecommand_2.zip' title='Secuenciado dinámico de Commands'>Secuenciado dinámico de Commands</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.madeinflex.com/2007/09/07/cairngorm-secuenciado-de-commands/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Caso de estudio: FlexStore con Guasax</title>
		<link>http://www.madeinflex.com/2007/06/04/caso-de-estudio-flexstore-con-guasax/</link>
		<comments>http://www.madeinflex.com/2007/06/04/caso-de-estudio-flexstore-con-guasax/#comments</comments>
		<pubDate>Sun, 03 Jun 2007 22:30:03 +0000</pubDate>
		<dc:creator>Angel Blesa</dc:creator>
				<category><![CDATA[Casos de uso]]></category>
		<category><![CDATA[Guasax]]></category>

		<guid isPermaLink="false">http://www.madeinflex.com/2007/06/04/caso-de-estudio-flexstore-con-guasax/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->Como veíamos en el post anterior, hemos pasado la versión inicial del Flex Store simplificado a una versión bajo el framework de Cairngorm. En este post pasaremos esta misma aplicación a la versión con guasax para poder apreciar mejor los pros y los contras de una u otra solución.
En este ejemplo no hacemos uso de [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>Como veíamos en el post anterior, hemos pasado la versión inicial del Flex Store simplificado a una versión bajo el framework de Cairngorm. En este post pasaremos esta misma aplicación a la versión con guasax para poder apreciar mejor los pros y los contras de una u otra solución.</p>
<p>En este ejemplo no hacemos uso de todas las posibilidades que nos aporta el framework, roles de usuario, interceptors, reutilización de componentes, acceso a servicios remotos,acciones delegadas entre componentes,  etc... Pero permite apreciar de una manera muy sencilla la forma de lanzar los casos de uso de nuestra aplicación.</p>
<p>Comencemos entonces, a ver esta versión y analizar las posibilidades que nos aporta este framework en el desarrollo de nuestros proyectos.</p>
<p><span id="more-442"></span></p>
<div class="toc">
<ol>
<li><a href="http://www.madeinflex.com/2007/06/04/caso-de-estudio-flexstore-con-guasax/#toc-fichero-principal-de-la-aplicacion">Fichero principal de la aplicación</a></li>
<li><a href="http://www.madeinflex.com/2007/06/04/caso-de-estudio-flexstore-con-guasax/#toc-creacion-del-fichero-guasax-conf-xml">Creación del fichero guasax-conf.xml</a></li>
<li><a href="http://www.madeinflex.com/2007/06/04/caso-de-estudio-flexstore-con-guasax/#toc-de-los-command-a-los-business-objects">De los Command a los business objects</a></li>
<li><a href="http://www.madeinflex.com/2007/06/04/caso-de-estudio-flexstore-con-guasax/#toc-invocando-las-acciones-desde-la-vista">Invocando las acciones desde la vista</a></li>
<li><a href="http://www.madeinflex.com/2007/06/04/caso-de-estudio-flexstore-con-guasax/#toc-conclusiones">Conclusiones</a></li>
<li><a href="http://www.madeinflex.com/2007/06/04/caso-de-estudio-flexstore-con-guasax/#toc-enlaces-y-recursos">Enlaces y recursos</a></li>
<li><a href="http://www.madeinflex.com/2007/06/04/caso-de-estudio-flexstore-con-guasax/#toc-las-3-versiones-del-ejemplo-flex-store-simplificado">Las 3 versiones del ejemplo Flex Store simplificado</a></li>
</ol>
</div>
<p>En primer lugar para los que tengan dudas de como se plantea una programa bajo el framework guasax , recomiendo echar un vistazo a los post del <a href="http://www.madeinflex.com/2007/04/24/ejemplo-holamundo-en-guasax/">Hola mundo en guasax</a>, y ejemplo <a href="http://www.madeinflex.com/2007/05/15/ejemplo-calculadora-en-guasax/">Calculadora en guasax</a>, en los que se define la forma de crear un proyecto guasax, y como poner en marcha el mismo.</p>
<p>Para seguir el articulo , podéis <a href="http://www.guasax.com/examples/tiendavirtualguasax/Main.html">ver el ejemplo online</a> pudiendo <a href="http://www.guasax.com/examples/tiendavirtualguasax/srcview/index.html">acceder al código fuente</a>, y descargar el <a href="http://guasax.googlecode.com/files/TiendaVirtualGuasax.rar">proyecto para importar en Flex Builder aqui</a>.</p>
<h3 id="toc-fichero-principal-de-la-aplicacion">Fichero principal de la aplicación</h3>
<p>En primer lugar vemos como cargamos el fichero de configuración de guasax en el fichero Main.mxml de la aplicación, ejecutamos el método initGuasax en el evento preinitialize="initGuasax()".</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="450" height="250" id="ftf_wp" align="middle">
		  <param name="movie" value="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" />
		  <param name="quality" value="high" />
		  <param name="scale" value="noscale" />
		  <param name="bgcolor" value="#ffffff" />
		  <param name="flashvars" value="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=0&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		  <embed src="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" quality="high" scale="noscale" bgcolor="#ffffff" width="450" height="250" name="ftf_wp" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=0&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		</object></p>
<p>Cuando termina de parsear el fichero y cargar el framework , ejecutamos el método inicializaModeloDeDatos, llamando la caso de uso PIDE_PRODUCTOS. Vemos comentadas las lineas de las otros dos versiones del ejemplo.</p>
<h3 id="toc-creacion-del-fichero-guasax-conf-xml">Creación del fichero guasax-conf.xml</h3>
<p>En el fichero guasax-conf.xml definimos los componentes y las acciones de estos, que queremos invocar en nuestra aplicación a través del framework. Una vez definidas estas acciones podremos invocarlas desde cualquier parte de nuestra aplicación.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="450" height="250" id="ftf_wp" align="middle">
		  <param name="movie" value="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" />
		  <param name="quality" value="high" />
		  <param name="scale" value="noscale" />
		  <param name="bgcolor" value="#ffffff" />
		  <param name="flashvars" value="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=1&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		  <embed src="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" quality="high" scale="noscale" bgcolor="#ffffff" width="450" height="250" name="ftf_wp" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=1&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		</object></p>
<p>En este fichero definimos dos componentes, con sus acciones y los métodos de las clases BO (Business Object) que se van a ejecutar cuando invoquemos estas acciones.<br />
Como veremos en posteriores ejemplos podemos incluir mas ficheros de definición de componentes desde este fichero de configuración pudiendo separar en varios ficheros la configuración de los componentes de nuestra aplicación.<br />
Acompañando al fichero de configuración en muy recomendable definirnos un fichero de constantes en las que definir los nombres de los métodos , de los servicios remotos , y de las vistas.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="450" height="250" id="ftf_wp" align="middle">
		  <param name="movie" value="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" />
		  <param name="quality" value="high" />
		  <param name="scale" value="noscale" />
		  <param name="bgcolor" value="#ffffff" />
		  <param name="flashvars" value="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=2&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		  <embed src="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" quality="high" scale="noscale" bgcolor="#ffffff" width="450" height="250" name="ftf_wp" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=2&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		</object></p>
<p>De esta manera a lo largo de nuestro código siempre invocaremos a nuestras acciones de negocio, servicios remotos, recuperaremos las vistas del ViewLocator, a través de constantes, para tener menos dependencia de los nombres (String) que ponemos a los métodos y poder referenciarlos siempre a través de una constante, fácilmente accesible.</p>
<h3 id="toc-de-los-command-a-los-business-objects">De los Command a los business objects</h3>
<p>Como hemos visto en el fichero de configuración, para este ejemplo creados dos clases que harán las veces de business objects, concentrando la lógica de nuestra aplicación en la que accederemos y modificaremos el modelo de datos. Estás clases agruparan conceptualmente los métodos relacionados con los Productos y los Pedidos.</p>
<p>A diferencia de las clases comando del ejemplo con Cairngorm , en este caso los métodos de los BO reciben los parámetros directamente en lugar de una clase Event de la que se extraen los atributos que pasamos al método.</p>
<p>Los métodos de estos BO deben estar totalmente desacoplados de la vista sin tener que hacer referencia directamente a ningún elemento del interface de usuario, para poder ser reutilizados sin tener que tener presente una dependencia con dicho interface. De esta manera conseguimos un mayor grado de reutilización en nuestros componentes. </p>
<h3 id="toc-invocando-las-acciones-desde-la-vista">Invocando las acciones desde la vista</h3>
<p>Para cada una de los disparos de los eventos que veíamos en el ejemplo con cairngorm tenemos en este caso una invocación a una acción de guasax. En el ejemplo con cairngorm había una serie de acciones que desencadenaban una actualización del interface, en este caso esas acciones se llevan a cabo llamando a través de GuasaxContainer, a un método de la vista.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="450" height="250" id="ftf_wp" align="middle">
		  <param name="movie" value="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" />
		  <param name="quality" value="high" />
		  <param name="scale" value="noscale" />
		  <param name="bgcolor" value="#ffffff" />
		  <param name="flashvars" value="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=3&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		  <embed src="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" quality="high" scale="noscale" bgcolor="#ffffff" width="450" height="250" name="ftf_wp" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=3&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		</object></p>
<p>Como vemos en estos dos ejemplos de llamadas(de la clase FormEnvioDatos.mxml) , tenemos un método en el framework que nos permite ejecutar un método de una vista pasándole el objecto que representa esa vista (previamente lo hemos almacenado con una key en el ViewLocator), el nombre  del método, y los parámetros que queremos pasarle como un Array.</p>
<p>En el codigo de arriba recuperamos el objeto vista que previamente hemos metido en el ViewLocator, con el nombre ConstantsApp.PROCESAR_PEDIDO_VIEW, que corresponde en este caso con la vista ProcesarPedido.mxml.<br />
En esta vista tenemos el metodo selectedView, desde el que actualizamos el indice del viewStack.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="450" height="250" id="ftf_wp" align="middle">
		  <param name="movie" value="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" />
		  <param name="quality" value="high" />
		  <param name="scale" value="noscale" />
		  <param name="bgcolor" value="#ffffff" />
		  <param name="flashvars" value="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=4&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		  <embed src="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" quality="high" scale="noscale" bgcolor="#ffffff" width="450" height="250" name="ftf_wp" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=4&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		</object></p>
<p>En el fichero principal Main.mxml , también tenemos un método selectedView en el que dependiendo de que valor pasamos al mismo, llevamos a cabo un efecto u otro, en este caso rotamos el Cubo hacia un sentido u otro.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="450" height="250" id="ftf_wp" align="middle">
		  <param name="movie" value="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" />
		  <param name="quality" value="high" />
		  <param name="scale" value="noscale" />
		  <param name="bgcolor" value="#ffffff" />
		  <param name="flashvars" value="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=5&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		  <embed src="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" quality="high" scale="noscale" bgcolor="#ffffff" width="450" height="250" name="ftf_wp" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=5&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		</object></p>
<p>En nuestras vistas podemos tener todos los métodos de actualización que queramos, con cualquier nombre y con cualquier paso de parámetros. No estamos limitados a un solo método selectedView. Podemos definir métodos concretos que lleven a cabo trabajos concretos sobre las vistas que sean invocados después de finalizar diferentes acciones de los BO, dependiendo de como esas sean llamadas, con redirección a la vista y sin redirección. </p>
<p>Para el resto de acciones del ejemplo que llaman a acciones tenemos invocaciones del tipo , executeAction, como podemos ver en el metodo agregarLineaDePedido() del  fichero DetalleProducto.mxml</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="450" height="250" id="ftf_wp" align="middle">
		  <param name="movie" value="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" />
		  <param name="quality" value="high" />
		  <param name="scale" value="noscale" />
		  <param name="bgcolor" value="#ffffff" />
		  <param name="flashvars" value="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=6&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		  <embed src="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" quality="high" scale="noscale" bgcolor="#ffffff" width="450" height="250" name="ftf_wp" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=442&no=6&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		</object></p>
<p>Por ejemplo, en el código de arriba vemos las tres formas de invocar a la misma acción en cada una de las versiones.</p>
<h3 id="toc-conclusiones">Conclusiones</h3>
<p>De una manera muy breve:<br />
- Los Events y Commands en Cairngorm se sustituyen por los métodos de nuestros diferentes componentes de negocio o business objects. Conseguimos con esta agrupación una menor cantidad de clases, Eliminando las clases comando y las clases evento, siendo sustituidas por las clases business  objects en las que agrupamos conceptualmente nuestros métodos de negocio</p>
<p>- El FrontController de Cairngorm desaparece en la versión en guasax, en la creamos un fichero de configuración donde definimos los componentes , sus acciones, y modificadores sobre las mismas como interceptors, roles, etc....</p>
<p>- En la versión con guasax , no tienes que extender tus clases de ninguna clase del framework, para que estas desarrollen su trabajo. Es un framework poco intrusivo.</p>
<p>- La actualización del interface no la hacemos a través de unas variables en el modelo, sino que tenemos una método concreto en el framework para llevar a cabo invocaciones a métodos definidos en nuestros ficheros de vista. De esta manera no acoplamos nuestra vista a nuestro Modelo de datos.</p>
<p>- En el momento de ejecutar una acción de tu lógica de negocio, puedes pasar que vista/s quieres que sea notificada(ejecutando un método de la misma) después de ejecutar el método del business  object. Este encadenamiento de ejecución de una parte de logica y otra de la vista(a la que llamamos coloquialmente, "redirección a la vista") , no esta definida en tiempo de compilación, sino que se lleva a cabo en tiempo de ejecución, en el momento de invocar el "executeAction", por lo que logica de negocio y vista no esta acoplados en ningún momento.<br />
Nuestras clases de negocio no saben absolutamente nada de las acciones de vista que les van a seguir, estas serán indicadas desde el lugar en el que se lance la acción, en tiempo de ejecución. De esta manera en un determinado momento nos puede interesar que a una acción le acompañe una ejecución de un método en una determinada vista de nuestra interface, pero en otro momento nos puede interesar solamente ejecutar la acción sin redireccionar a un método de la vista seguidamente.</p>
<p>En posteriores post analizaremos más funciones como acceso a servicios remotos, reutilización de componentes, encadenamiento de acciones, funciones delegadas en otros componentes, etc... viendo las posibilidades que nos brinda guasax para solventar estas acciones en nuestros programas.</p>
<h3 id="toc-enlaces-y-recursos">Enlaces y recursos</h3>
<p>- <a href="http://guasax.googlecode.com/files/TiendaVirtualGuasax.rar">El enlace para descarga del proyecto</a> lista para ser importado en Flex Builder</p>
<p>- <a href="http://www.guasax.com/examples/tiendavirtualguasax/Main.html">El enlace para ver el ejemplo online </a>con la opción de ver codigo fuente activada.</p>
<p>- Fuente para los <a href="http://weblogs.macromedia.com/auhlmann/archives/2007/03/distortion_effe.cfm">efectos de distorsión mostrados</a> en el ejemplo</p>
<h3 id="toc-las-3-versiones-del-ejemplo-flex-store-simplificado">Las 3 versiones del ejemplo Flex Store simplificado</h3>
<p>- Sin framework: Articulo 1 version <a href="http://www.madeinflex.com/2007/04/22/caso-de-estudio-flex-store-simplificado/">Flex Store simplificado</a>.</p>
<p>- Cairngorm: Articulo 2 version <a href="http://www.madeinflex.com/2007/05/31/caso-de-estudio-flex-store-simplificado-version-cairngorm/">Flex Store simplificado Cairngorm</a>.</p>
<p>- Guasax: Articulo 3 version <a href="http://www.madeinflex.com/2007/06/04/caso-de-estudio-flexstore-con-guasax/">Flex Store simplificado Guasax</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.madeinflex.com/2007/06/04/caso-de-estudio-flexstore-con-guasax/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Caso de estudio: FlexStore con Cairngorm</title>
		<link>http://www.madeinflex.com/2007/05/31/caso-de-estudio-flex-store-simplificado-version-cairngorm/</link>
		<comments>http://www.madeinflex.com/2007/05/31/caso-de-estudio-flex-store-simplificado-version-cairngorm/#comments</comments>
		<pubDate>Wed, 30 May 2007 22:23:46 +0000</pubDate>
		<dc:creator>Angel Blesa</dc:creator>
				<category><![CDATA[Cairngorm]]></category>
		<category><![CDATA[Casos de uso]]></category>

		<guid isPermaLink="false">http://www.madeinflex.com/2007/05/31/caso-de-estudio-flex-store-simplificado-version-cairngorm/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->Con la idea de preparar varias aproximaciones a la solución de un mismo problema he pasado la aplicación Flex Store simplificada desarrollada por Joan Garnet tanto a cairngorm como a guasax.
En la primera versión que desarrolló Joan mostraba en el ejemplo una serie de buenas practicas en cuanto a la organización de código y separación [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>Con la idea de preparar varias aproximaciones a la solución de un mismo problema he pasado la <a href="http://www.madeinflex.com/2007/04/22/caso-de-estudio-flex-store-simplificado/">aplicación Flex Store simplificada</a> desarrollada por <a href="http://www.madeinflex.com/team/#toc-joan-garnet">Joan Garnet</a> tanto a <a href="http://www.cairngormdocs.org/">cairngorm</a> como a <a href="http://www.guasax.com/blog/">guasax</a>.</p>
<p>En la primera versión que desarrolló Joan mostraba en el ejemplo una serie de buenas practicas en cuanto a la organización de código y separación de conceptos dentro de una aplicación Flex simulando una Flex Store simplificada.</p>
<p>En este ejemplo vemos esa misma aplicación pasada, con los mínimos cambios posibles, a Cairngorm. </p>
<p><span id="more-441"></span></p>
<div class="toc">
<ol>
<li><a href="http://www.madeinflex.com/2007/05/31/caso-de-estudio-flex-store-simplificado-version-cairngorm/#toc-preparando-el-proyecto">Preparando el proyecto</a></li>
<li><a href="http://www.madeinflex.com/2007/05/31/caso-de-estudio-flex-store-simplificado-version-cairngorm/#toc-el-controlador-en-cairngorm">El controlador en Cairngorm</a></li>
<li><a href="http://www.madeinflex.com/2007/05/31/caso-de-estudio-flex-store-simplificado-version-cairngorm/#toc-creacion-de-las-clases-evento-y-commands">Creación de las clases Evento y Commands</a></li>
<li><a href="http://www.madeinflex.com/2007/05/31/caso-de-estudio-flex-store-simplificado-version-cairngorm/#toc-lanzando-los-eventos">Lanzando los eventos</a></li>
<li><a href="http://www.madeinflex.com/2007/05/31/caso-de-estudio-flex-store-simplificado-version-cairngorm/#toc-conclusiones">Conclusiones</a></li>
<li><a href="http://www.madeinflex.com/2007/05/31/caso-de-estudio-flex-store-simplificado-version-cairngorm/#toc-enlaces-y-recursos">Enlaces y recursos</a></li>
</ol>
</div>
<p>En primer lugar decir simplemente que debido al gran trabajo de joan , pasarlo a cairngorm ha resultado extremadamente directo, ya que la aplicación estaba muy preconcebida para ello.</p>
<p>Como punto de partida recomendamos leer nuevamente <a href="http://www.madeinflex.com/2007/04/22/caso-de-estudio-flex-store-simplificado/">el articulo </a>de Joan para centrar el tema de discusión.<br />
En este articulo simplemente mostraremos algunos cambios relevantes en el código entre las dos versiones. Esperamos que tanto esta versión como la basada en guasax sirva como piedra de toque para la adopción de determinado framework, si todavía no utilizamos uno,  entorno al cual organizar y hacer crecer nuestros proyectos de la mejor manera posible.</p>
<p>El ejemplo de la aplicación con (acceso al código fuente para descarga y visualización ) <a href="http://www.guasax.com/examples/tiendavirtualcairngorm/Main.html">se puede ver aqui.</a></p>
<p>La podéis <a href="http://guasax.googlecode.com/files/TiendaVirtualCairngorm.rar">descargar directamente aquí como proyecto</a> para importar directamente en Flex Builder , con la libreria de Cairngorm incluida.</p>
<h3 id="toc-preparando-el-proyecto">Preparando el proyecto</h3>
<p>Como podemos ver en la estructura de la aplicación, tenemos un directorio swclibs en el que tenemos la libreria swc de cairngorm que deberos cargar en el Flex Build Path de nuestra aplicación.<br />
Además en el fichero principal de la aplicación , en este caso el Main.mxml, debemos cargar el Controlador que se encargará de crear y añadir los eventos necesarios para el funcionamiento de la aplicación:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="450" height="250" id="ftf_wp" align="middle">
		  <param name="movie" value="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" />
		  <param name="quality" value="high" />
		  <param name="scale" value="noscale" />
		  <param name="bgcolor" value="#ffffff" />
		  <param name="flashvars" value="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=441&no=0&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		  <embed src="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" quality="high" scale="noscale" bgcolor="#ffffff" width="450" height="250" name="ftf_wp" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=441&no=0&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		</object></p>
<p>Como podemos ver en el código, a través de la instrucción "control:Controller"  inicializamos el singleton del Controller ,lo que hará que este declare los eventos, vincule los comandos que los van a atender , y los añada al FrontController. Una nota importante, si un evento no es añadido al FrontController , aunque lo disparemos , NO se ejecutará el Comando que tiene asociado. Por ello si disparáis un evento y veis que no se ejecuta el Comando asociado, revisar si habéis añadido esta relación en el Controller.<br />
Una vez cargado el Controller, vemos que en el método inicializaModeloDeDatos lanzamos el primer evento para que se ejecute una acción. En la linea comentada podéis observar la forma de hacerlo en la versión anterior.</p>
<h3 id="toc-el-controlador-en-cairngorm">El controlador en Cairngorm</h3>
<p>Cairngorm nos aporta un FrontController del cual podemos heredar para crear nuestro propio Controlador, en este controlador declararemos nuestros eventos y les asignaremos una clase Comando a cada uno de estos para que desarrollen su función.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="450" height="250" id="ftf_wp" align="middle">
		  <param name="movie" value="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" />
		  <param name="quality" value="high" />
		  <param name="scale" value="noscale" />
		  <param name="bgcolor" value="#ffffff" />
		  <param name="flashvars" value="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=441&no=1&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		  <embed src="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" quality="high" scale="noscale" bgcolor="#ffffff" width="450" height="250" name="ftf_wp" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=441&no=1&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		</object></p>
<h3 id="toc-creacion-de-las-clases-evento-y-commands">Creación de las clases Evento y Commands</h3>
<p>Partiendo de la clase Controlador del ejemplo inicial, en la que teníamos declarados los eventos que va a disparar la aplicación, así como los métodos que atienden a dichos eventos, podemos crear las clases comando para atender a cada uno de estos eventos que vamos a lanzar desde el código.<br />
Las clases Evento tiene pocos cambios respecto a la version anterior, simplemente heredan de la clase de Cairngorm CairngormEvent, la que les permitirá entre otras cosas, poder disparase directamente sin necesidad de utilizar la clase CairngormEventDispatcher.<br />
Para cada uno de los eventos y casos de uso que queremos lanzar en nuestra aplicación nos creamos una clase Comando. Para ello debemos implementar la interface ICommand.<br />
Aqui podemos ver un ejemplo de uno de los comandos de la aplicación:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="450" height="250" id="ftf_wp" align="middle">
		  <param name="movie" value="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" />
		  <param name="quality" value="high" />
		  <param name="scale" value="noscale" />
		  <param name="bgcolor" value="#ffffff" />
		  <param name="flashvars" value="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=441&no=2&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		  <embed src="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" quality="high" scale="noscale" bgcolor="#ffffff" width="450" height="250" name="ftf_wp" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=441&no=2&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		</object></p>
<p>Los métodos que en el ejemplo anterior teníamos en el Controlador , los hemos encapsulado en clases comando. Si desde estas clases comando tenemos que realizar llamadas a servicios remotos , estas llamadas se delegan en un BusinessDelegate que es el encargado de hacer la invocación al servicio remoto.</p>
<h3 id="toc-lanzando-los-eventos">Lanzando los eventos</h3>
<p>Para lanzar los eventos de Cairngorm lo podemos hacer a través del CairngormEventDispatcher  o directamente desde el propio evento , llamando al método dispatch();</p>
<p>Como podemos ver en esta porción de codigo:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="450" height="250" id="ftf_wp" align="middle">
		  <param name="movie" value="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" />
		  <param name="quality" value="high" />
		  <param name="scale" value="noscale" />
		  <param name="bgcolor" value="#ffffff" />
		  <param name="flashvars" value="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=441&no=3&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		  <embed src="http://www.madeinflex.com/./wp-content/plugins/FlashTextFormatter/ftf_wp.swf" quality="high" scale="noscale" bgcolor="#ffffff" width="450" height="250" name="ftf_wp" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="w=450&h=250&file=http://www.madeinflex.com/index.php&ftf=true&postID=441&no=3&def=http://www.madeinflex.com./wp-content/plugins/FlashTextFormatter/definitions/as2.xml&auto=true&" />
		</object></p>
<p>vemos como desde una parte de la vista de nuestra aplicación, en el manejador del evento click, sobre un botón ponemos el disparo de algunos eventos. Desde el click del boton estamos desencadenando el evento que hará que se ejecute el comando que tenga asociado dicho evento, desde este comando llevaremos a cabo nuestra lógica de negocio , llamada a servicios remotos , y actualización de nuestro modelo de datos.</p>
<h3 id="toc-conclusiones">Conclusiones</h3>
<p>En este ejemplo hemos podido ver como Cairngorm nos aporta una cierta organización de código en torno a unos patrones de diseño. En el ejemplo preliminar el codigo ya estaba organizado en torno a unas practicas programativas similares por lo que la diferencia no es excesiva. Cairngorm nos aporta como valía añadida un FrontController con alguna función añadida, una forma de definir y consumir servicios remotos (a través del ServiceLocator) y una forma de vincular una evento con una clase que implemente el patrón Comando.</p>
<p>En el siguiente post mostraremos el mismo ejemplo en guasax para empezar a trabajar en algunas de las problemáticas que se plantean cuando creamos proyectos con un volumen de clases considerable  y debemos primar la reutilización de código así como la mantenibilidad de la aplicación.</p>
<p>Finalmente, agradecer a Joan las facilidades prestadas para utilizar su ejemplo como plataforma para trabajar este tipo de problemáticas en el desarrollo de  aplicaciones Flex.</p>
<h3 id="toc-enlaces-y-recursos">Enlaces y recursos</h3>
<p>- Articulo de <a href="http://www.madeinflex.com/team/#toc-joan-garnet">Joan</a> con la primera versión del <a href="http://www.madeinflex.com/2007/04/22/caso-de-estudio-flex-store-simplificado/">ejemplo Flex Store simplificado</a>.</p>
<p>- <a href="http://www.guasax.com/examples/tiendavirtualcairngorm/Main.html">Enlace online al ejemplo</a> con opción de ver codigo fuente con el boton derecho del raton. </p>
<p>- <a href="http://guasax.googlecode.com/files/TiendaVirtualCairngorm.rar">Enlace para descarga del proyecto</a> para importar directamente en Flex Builder con la librería de cairngorm incluida.</p>]]></content:encoded>
			<wfw:commentRss>http://www.madeinflex.com/2007/05/31/caso-de-estudio-flex-store-simplificado-version-cairngorm/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Proyecto fin de carrera</title>
		<link>http://www.madeinflex.com/2007/05/26/proyecto-fin-de-carrera/</link>
		<comments>http://www.madeinflex.com/2007/05/26/proyecto-fin-de-carrera/#comments</comments>
		<pubDate>Sat, 26 May 2007 00:01:15 +0000</pubDate>
		<dc:creator>Vicente Pastor</dc:creator>
				<category><![CDATA[Casos de uso]]></category>

		<guid isPermaLink="false">http://www.madeinflex.com/2007/05/26/proyecto-fin-de-carrera/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->Hola a todos,
Recientemente he realizado mi proyecto fin de carrera de Ingeniería Informática utilizando Flex 2. Aunque tengo experiencia previa en otros lenguajes de programación, era la primera vez que me introducía en este mundo de las RIAs y que utilizaba Flex y ActionScript.
Me gustaría enseñaros lo que he conseguido hacer.

La aplicación consiste en la [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>Hola a todos,</p>
<p>Recientemente he realizado mi proyecto fin de carrera de Ingeniería Informática utilizando Flex 2. Aunque tengo experiencia previa en otros lenguajes de programación, era la primera vez que me introducía en este mundo de las RIAs y que utilizaba Flex y ActionScript.</p>
<p>Me gustaría enseñaros lo que he conseguido hacer.</p>
<p><span id="more-431"></span></p>
<p>La aplicación consiste en la simulación de una red cuya topología puede diseñar el usuario para estudiar el comportamiento de los datagramas ante la fragmentación IP.</p>
<p>No quiero enrollarme mucho aquí, así que si alguno tiene interés y quiere más información o surge alguna pregunta sobre el funcionamiento de la aplicación adelante con ella. Antes de que me digais nada quisiera comentar que el tiempo del que se dispone para este tipo de proyectos es limitado. A mí me gustaría que la aplicación contemplase muchas más cosas (TCP y UDP, enrutamiento realista, etc.) Desafortunadamente no había tiempo para todo y eso queda abierto para futuras ampliaciones de la aplicación.</p>
<p>Ha sido mi primera vez. Sed benevolentes con los comentarios.</p>
<p>Aquí podeis probar <a target="_blank" href="http://www.i18n.es/fragSim" title="fragSim">fragSim</a>.</p>
<p>Un saludo y seguid así con este estupendo sitio sobre Flex.</p>]]></content:encoded>
			<wfw:commentRss>http://www.madeinflex.com/2007/05/26/proyecto-fin-de-carrera/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Ejemplo Cairngorm 2.2 con AMFPHP 1.9</title>
		<link>http://www.madeinflex.com/2007/05/21/ejemplo-cairngorm-22-con-amfphp-19/</link>
		<comments>http://www.madeinflex.com/2007/05/21/ejemplo-cairngorm-22-con-amfphp-19/#comments</comments>
		<pubDate>Mon, 21 May 2007 17:29:23 +0000</pubDate>
		<dc:creator>Joan Garnet</dc:creator>
				<category><![CDATA[Cairngorm]]></category>
		<category><![CDATA[Casos de uso]]></category>

		<guid isPermaLink="false">http://www.madeinflex.com/2007/05/21/ejemplo-cairngorm-22-con-amfphp-19/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->Presento un caso de uso de Cairngorm 2.2 incluyendo las últimas convenciones y funcionalidades. Ideal para iniciarse a la arquitectura por ser muy básico (es un formulario de Login).
El ejemplo consume servicios sobre AMFPHP 1.9 para poder mostrar también como pasar objetos tipados de Flex a PHP y viceversa.
Descargar ejemplo: Ejemplo Cairngorm 2.2 con amfphp [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>Presento un caso de uso de <a href="http://labs.adobe.com/wiki/index.php/Cairngorm:Cairngorm2.2:Release_Notes">Cairngorm 2.2</a> incluyendo las últimas convenciones y funcionalidades. Ideal para iniciarse a la arquitectura por ser muy básico (es un formulario de Login).<br />
El ejemplo consume servicios sobre AMFPHP 1.9 para poder mostrar también como pasar objetos tipados de Flex a PHP y viceversa.<br />
Descargar ejemplo: <a href='http://www.madeinflex.com/img/entries/2007/05/cairngorm2_2_loginsample.zip' title='Ejemplo Cairngorm 2.2 con amfphp 1.9 (Login)'>Ejemplo Cairngorm 2.2 con amfphp 1.9 (Login)</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.madeinflex.com/2007/05/21/ejemplo-cairngorm-22-con-amfphp-19/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Pikeo</title>
		<link>http://www.madeinflex.com/2007/05/10/pikeo/</link>
		<comments>http://www.madeinflex.com/2007/05/10/pikeo/#comments</comments>
		<pubDate>Thu, 10 May 2007 13:07:30 +0000</pubDate>
		<dc:creator>fred</dc:creator>
				<category><![CDATA[Casos de uso]]></category>

		<guid isPermaLink="false">http://www.madeinflex.com/2007/05/10/pikeo/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->Pikeo es un producto beta de  France Telecom Research and Development LLC en South San Francisco.
Pikeo es otra de las alternativas que ofrece la web 2.0 para almacenar fotografías en linea y compartirlas con todo el mundo.

Pikeo te ayuda a organizar tus fotos en álbumes inteligentes basados en los datos "qué", "dónde", y "quién" [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p><a href="http://www.pikeo.es">Pikeo</a> es un producto beta de  France Telecom Research and Development LLC en South San Francisco.</p>
<p><strong>Pikeo</strong> es otra de las alternativas que ofrece la web 2.0 para almacenar fotografías en linea y compartirlas con todo el mundo.</p>
<p><span id="more-373"></span></p>
<p><strong>Pikeo</strong> te ayuda a organizar tus fotos en álbumes inteligentes basados en los datos "qué", "dónde", y "quién" (llamadas "etiquetas"). Puedes decidir cuales de tus fotos quieres compartir con tu familia, amigos, y otros, y cuales no quieres mostrar a nadie.</p>
<p>La interface de <strong>Pikeo</strong> es muy atractiva, ofrece 1GB de espacio gratis por cuenta. Además de soporte en inglés, francés y español.</p>
<p>Incluye también un mapa para localizar las fotos a travez de etiquetas, un buscador personalizable y soporte para comentarios.</p>
<p>Otra funcionalidad interesante es la de subir imágenes a <strong>Pikeo</strong> desde cualquier lugar a través del movil. Y por si deseas compartir tus fotos insertándolas en tu sitio web, <strong>Pikeo</strong> te da unas lineas de código que deberás pegar en tu sitio.</p>
<p>Este servicio aún continua en fase beta, por lo que el soporte al cliente es limitado de momento. Sin embargo, sigue siendo una buena alternativa para sitios como Flickr.</p>]]></content:encoded>
			<wfw:commentRss>http://www.madeinflex.com/2007/05/10/pikeo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

