<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.geturl.net/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>blog.geturl.net - mvc</title>
  <link>http://blog.geturl.net/</link>
  <description>Actionscript, pixLib et tous leurs amis ;)</description>
  <language>fr</language>
  <pubDate>Wed, 27 Aug 2008 01:14:27 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>[lowRA] - Owner, la notion de plugin.</title>
    <link>http://blog.geturl.net/post/2008/01/13/%5BlowRA%5D-Owner-la-notion-de-plugin</link>
    <guid isPermaLink="false">urn:md5:944ab0408e1c415630e477818830cac6</guid>
    <pubDate>Sun, 13 Jan 2008 19:01:00 +0100</pubDate>
    <dc:creator>ali_o_kan</dc:creator>
        <category>Flash plateforme</category>
        <category>actionscript</category><category>channel</category><category>Flash</category><category>lowRA</category><category>mvc</category><category>owner</category><category>plugin</category>    
    <description>&lt;p&gt;Bonjour &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Je pense que je n'ai plus besoin de convaincre qui que ce soit sur l'intérêt d'utiliser une structure MVC dans le développement d'une application. &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://www.pixlib.org/&quot; hreflang=&quot;en&quot;&gt;PixLib&lt;/a&gt; permet de mettre en place &lt;a href=&quot;http://blog.geturl.net/post/2006/10/27/63-pixlib-vues-modeles-controleur&quot; hreflang=&quot;fr&quot;&gt;une structure MVC + FrontController de manière global&lt;/a&gt;. C'est vraiment puissant, mais cette solution à ses limites. Prenons le cas où l'on charge plusieurs application &quot;pixLib&quot; dans un même site, on se retrouve avec des conflits entre les différentes classes global, le même type de souci que l'on a quand on utilise le ciblage via le _root + des loadMovie(). Pour contourner ce problème chacun a mis en place sa propre solution.&lt;/p&gt;


&lt;p&gt;Avec &lt;a href=&quot;http://www.lowra.org/&quot; hreflang=&quot;fr&quot;&gt;lowRA&lt;/a&gt; se souci a disparu! &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;    &lt;h3&gt;Owner, une histoire de channel&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Si vous avez utilisez les channels dans pixLib vous pouvez directement passer au point suivant.&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;Dans pixLib on a vu apparaître &lt;a href=&quot;http://blog.geturl.net/post/2006/01/07/15-pixlib-import-combourreloglogchannel&quot; hreflang=&quot;fr&quot;&gt;la logique de Channel dans la classe Logger&lt;/a&gt;.
L'idée du channel était d'émettre les messages de log sur différentes fréquences, et de pouvoir s'abonner sur une, plusieurs ou toutes les fréquences.&lt;/p&gt;

&lt;pre&gt;
[actionscript]
var filtreChannel : LogChannel = new LogChannel(&amp;quot;FILTRE&amp;quot;);
Logger.getInstance().addLogListener( LuminicTracer.getInstance(), filtreChannel);
Logger.LOG(&amp;quot;pif&amp;quot;, LogLevel.INFO, filtreChannel);
Logger.LOG(&amp;quot;paf&amp;quot;, LogLevel.INFO);
&lt;/pre&gt;


&lt;p&gt;Avec cette exemple, on ne recevra que le message &quot;pif&quot; et non &quot;paf&quot; car le loggueur est uniquement abonné aux messages qui sont émis sur le channel LogChannel(&quot;FILTRE&quot;).&lt;/p&gt;


&lt;h3&gt;Un plugin == un owner == un channel&lt;/h3&gt;

&lt;p&gt;Dans lowRA, on a maintenant la possibilité de définir un channel, appelé owner, pour chaque structure MVC.&lt;/p&gt;


&lt;p&gt;ce qui donne&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
[actionscript]
var monModel : Model = new Model(owner, name); // extends AbstractModel
ModelLocator.getInstance(owner).getModel(name); // récupère l'instance de monModel
var maVue : View = new View(owner, name); // extends AbstractView
ViewLocator.getInstance(owner).getView(name); // récupère l'instance de maVue
&lt;/pre&gt;


&lt;p&gt;Plus de souci de scoop lors que l'on charge plusieurs structures MVC+FrontController global, car chaque plugin a son propre owner (channel). &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;La suite au prochaine épisode. &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>[lowRA] - Un petit lifting sur le MVC+FC</title>
    <link>http://blog.geturl.net/post/2008/01/12/%5BlowRA%5D-Un-petit-lifting-sur-le-MVC</link>
    <guid isPermaLink="false">urn:md5:404ce97db657aed0b3b62137d2e692dd</guid>
    <pubDate>Sat, 12 Jan 2008 18:42:00 +0100</pubDate>
    <dc:creator>ali_o_kan</dc:creator>
        <category>Flash plateforme</category>
        <category>actionscript</category><category>Flash</category><category>lowRA</category><category>mvc</category><category>pixLib</category>    
    <description>&lt;p&gt;La première chose qui risque de troubler les utilisateurs de &lt;a href=&quot;http://www.pixlib.org&quot; hreflang=&quot;en&quot;&gt;pixLib&lt;/a&gt; quand ils débarquent dans &lt;a href=&quot;http://www.lowra.org&quot; hreflang=&quot;en&quot;&gt;lowRA&lt;/a&gt;, c'est la disparition du &lt;a href=&quot;http://blog.geturl.net/post/2006/05/10/48-pixlib-graphiclib-et-moviecliphelper-vs-movieclip-parti&quot; hreflang=&quot;fr&quot;&gt;MovieClipHelper&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Pas de panique, c'est un mal pour un bien. &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Voici en deux mots comment mettre en place une simple structure MVC dans lowRA.&lt;/p&gt;


&lt;p&gt;Commençons tout d'abord par un peu de nomenclature.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.geturl.net/lowra/html/com_bourre_view_AbstractView.html&quot; hreflang=&quot;en&quot;&gt;AbstractView&lt;/a&gt; et &lt;a href=&quot;http://www.geturl.net/lowra/html/com_bourre_view_ViewLocator.html&quot; hreflang=&quot;en&quot;&gt;ViewLocator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.geturl.net/lowra/html/com_bourre_model_AbstractModel.html&quot; hreflang=&quot;en&quot;&gt;AbstractModel&lt;/a&gt; et &lt;a href=&quot;http://www.geturl.net/lowra/html/com_bourre_model_ModelLocator.html&quot; hreflang=&quot;en&quot;&gt;ModelLocator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.geturl.net/lowra/html/com_bourre_commands_AbstractCommand.html&quot; hreflang=&quot;en&quot;&gt;AbstractCommand &lt;/a&gt;et &lt;a href=&quot;http://www.geturl.net/lowra/html/com_bourre_commands_FrontController.html&quot; hreflang=&quot;en&quot;&gt;FrontController&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour rappel, une classe dit Abstraite (Abstract) ne peut être utilisé telle quelle, il faut d'abord l'étendre.&lt;/p&gt;    &lt;h3&gt;Voyons le cas de l'AbstractModel&lt;/h3&gt;

&lt;p&gt;Pour utiliser la classe AbstractModel nous devons l'étendre.&lt;/p&gt;

&lt;pre&gt;
[actionscript]
public class DrawingModel 
	extends AbstractModel 
{

	public function DrawingModel(owner : Plugin = null, name : String = null)
	{
		super(owner, name);
		Debug.INFO(this + &amp;quot; is CREATE !!!&amp;quot;);
	}
&lt;/pre&gt;


&lt;p&gt;Dans un premier temps nous n'allons pas tenir compte de l'argument owner (&lt;del&gt;je le présenterait dans le billet suivant&lt;/del&gt;, &lt;a href=&quot;http://blog.geturl.net/post/2008/01/13/%5BlowRA%5D-Owner-la-notion-de-plugin&quot; hreflang=&quot;fr&quot;&gt;[lowRA] - Owner, la notion de plugin&lt;/a&gt; ). Ce qu'il faut retenir c'est que chaque modèle reçoit un nom, il s'agit d'un identifiant (unique!) qui permettra de récupèrer l'instance de la classe de n'importe quel endroit de l'application grâce à la classe ModelLocator.&lt;/p&gt;


&lt;h3&gt;ModelLocator&lt;/h3&gt;

&lt;p&gt;ModelLocator est un singleton (je ne veux aucun commentaire des puristes :p ), ce qui veut dire qu'il ne peut exister qu'une seule instance de la classe. Cette classe stock en elle l'ensemble des Modèle de l'application, et donc permet de récupérer de façon global n'importe quelle instance d'AbstractModel instancié.&lt;/p&gt;

&lt;pre&gt;
[actionscript]
ModelLocator.getInstance().getModel(&amp;quot;nom_de_mon_model&amp;quot;);
&lt;/pre&gt;

&lt;pre&gt;&lt;/pre&gt;

&lt;p&gt;Pour les vues c'est la même logique avec AbstractView et ViewLocator. Et pour les commandes c'est presque parreil, la seul différence réside dans le fait que c'est le FrontControlleur qui fait office de locator et que l'identifiant est le nom d'un événement.&lt;/p&gt;
&lt;pre&gt;
[actionscript]
monController.pushCommandClass(&amp;quot;monEvenement&amp;quot;, MaCommandExecute);
&lt;/pre&gt;


&lt;p&gt;Rien de bien nouveau avec pixLib si ce n'est le pushCommandClass. Maintenant nous pouvons choisir d'exécuter à chaque évènement la même instance de la commande ou dans instancier une nouvelle (plus proche du pattern originel).&lt;/p&gt;
&lt;pre&gt;
[actionscript] 
public function pushCommandClass( eventName : String, commandClass : Class ) : void
public function pushCommandInstance( eventName : String, command : Command ) : void
&lt;/pre&gt;


&lt;p&gt;Voilà, avec ces six classes nous avons de quoi déployer une structure MVC + FrontController en AS3. &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;En bonus, je me suis amusé à porter un petit projet MVC pixLib vers lowRA.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.geturl.net/post/2007/12/24/%5BpixLib%5D-Introduction-application-de-dessin&quot; hreflang=&quot;fr&quot;&gt;Les sources AS2 (pixLib)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.geturl.net/download/0801_lowra/lowra_drowing_mvc_120108.zip&quot; hreflang=&quot;zip&quot;&gt;Les sources AS3 (lowRA)&lt;/a&gt; - la build utilise &lt;a href=&quot;http://blog.geturl.net/post/2008/01/10/%5BiFac%5D-La-compilation-exposant-10&quot; hreflang=&quot;fr&quot;&gt;iFac pour compiler&lt;/a&gt;. &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour ceux qui veulent savoir un peut plus sur le MVC+FC dans pixLib&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.geturl.net/post/2006/10/27/63-pixlib-vues-modeles-controleur&quot; hreflang=&quot;fr&quot;&gt;[pixLib] - Vues, Modèles, Contrôleur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://gdumas.developpez.com/traductions/articles/flash/pixlib/bases/&quot; hreflang=&quot;fr&quot;&gt;Comprendre les bases du framework PixLib&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>