<?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>Thinking in Code &#187; mvc</title>
	<atom:link href="http://www.michelboudreau.com/tags/mvc/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.michelboudreau.com</link>
	<description>Michel Boudreau&#039;s Personal Blog</description>
	<lastBuildDate>Wed, 25 Apr 2012 20:18:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Presenter vs. Mediator</title>
		<link>http://www.michelboudreau.com/2011/05/19/presenter-vs-mediator/</link>
		<comments>http://www.michelboudreau.com/2011/05/19/presenter-vs-mediator/#comments</comments>
		<pubDate>Thu, 19 May 2011 21:48:15 +0000</pubDate>
		<dc:creator>Michel Boudreau</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[front-end]]></category>
		<category><![CDATA[Jens Halm]]></category>
		<category><![CDATA[lab49]]></category>
		<category><![CDATA[mediator]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[parsley]]></category>
		<category><![CDATA[presenter]]></category>
		<category><![CDATA[robotlegs]]></category>

		<guid isPermaLink="false">http://www.michelboudreau.com/?p=693</guid>
		<description><![CDATA[This discussion has raged on for some time. Both are ...]]></description>
			<content:encoded><![CDATA[<p>This discussion has raged on for  some time.  Both are fairly common patterns used for front-end development; it&#8217;s a new take on the classic MVC pattern.  Recently, the argument has been re-ignited by the choice between two great application frameworks for Flex: <a href="http://www.robotlegs.org/" target="_blank">RobotLegs</a> and <a href="http://www.spicefactory.org/parsley/" target="_blank">Parsley</a>.</p>
<p><span id="more-693"></span></p>
<p>I will say this right away, I&#8217;m biased towards Parsley and have advocated its use for over a year and a half now.  It has time and time again proven itself a reliable, robust and rapid framework for application development.  Its track record is quite impressive;  It was used to build some of the world&#8217;s largest Flex applications.  Jens Halm, the creator of Parsley, has done a wonderful job at making his framework extensible, fast and optimized for both Flash and Flex.  Robotlegs is also a good framework, don&#8217;t get me wrong, it just doesn&#8217;t capture me as much and it&#8217;s not optimized for Flex (pure Actionscript), but  in the end it comes down to your development preference.</p>
<p>Now to ask the question, which pattern we use for our project? <a href="http://en.wikipedia.org/wiki/Model-view-presenter" target="_blank">Presenter</a> or <a href="http://en.wikipedia.org/wiki/Mediator_pattern" target="_blank">Mediator</a>?  Parsley is built around the Presenter pattern while RobotLegs uses Mediator.  Simply speaking, the difference between the two is fairly minimal, but can affect your project quite a bit.  Here&#8217;s a quick diagram on how they work:</p>
<p><a href="http://www.michelboudreau.com/wp-content/uploads/2011/05/StandardsDesignPatterns.png"><img class="aligncenter size-full wp-image-733" title="Standards&amp;DesignPatterns" src="http://www.michelboudreau.com/wp-content/uploads/2011/05/StandardsDesignPatterns.png" alt="" width="455" height="325" /></a></p>
<p>If you remember your UML class diagrams, you would see that a Mediator can only have one View, while the View can have many Mediators.  In this case, the Mediator is the &#8216;man-in-the-middle&#8217; since nobody else knows about it; its sole purpose is to listen to the View and give it data.  The View communicates with the Mediator through events to which the Mediator acts upon.  One thing I like about this pattern is that it forces developers to use a proper &#8220;data in, events out&#8221; methodology and separates the concerns of the business from the View.  This also creates decoupled components since there&#8217;s no hard dependency in the View; it could still fully function if it is moved into another project.</p>
<p>For the Presenter, things are a bit different since the View knows about it.  The Presenter is there to just present data which is easily binded within the View, but this is problematic since it&#8217;s coupling your View to that Presenter and even the model (data).  However, you don&#8217;t need to use events within the View to communicate to your Presenter since you can access its public functions directly.  It&#8217;s easier to use this method because it limits the code needed to communicate between the View and the Presenter, but it&#8217;s coupling your View.</p>
<p>In the diagram, you might have noticed that with a Mediator pattern you can have a View with several Mediators and even reuse the Mediators on other Views.  This makes the <em>Mediator more of a View based pattern</em>.  The Presenter however doesn&#8217;t care and a View can have multiple Presenters which can (and should) be reused across multiple Views to display the data they need.  This makes the <em>Presenter more of a data based pattern</em> since it&#8217;s job is to give access to data and manage it.</p>
<p>There you have it.  One thing to remember is that patterns are meant to help you develop, not make it harder.   Since I love Parsley so much and had a need for a Mediator pattern for a project (needed to decouple the component) and Parsley only provides a Presenter pattern, I extended the framework to include a Mediator tag. <a href="https://github.com/mboudreau/Parsley-Mediator" target="_blank"> It&#8217;s completely open source and now on GitHub</a>.  Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michelboudreau.com/2011/05/19/presenter-vs-mediator/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Enterprise HTML5 &amp; Javascript</title>
		<link>http://www.michelboudreau.com/2011/01/19/enterprise-html5-javascript/</link>
		<comments>http://www.michelboudreau.com/2011/01/19/enterprise-html5-javascript/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 02:45:06 +0000</pubDate>
		<dc:creator>Michel Boudreau</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[compress]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascriptmvc]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jslint]]></category>
		<category><![CDATA[jsunit]]></category>
		<category><![CDATA[lab49]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[minimize]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[package]]></category>
		<category><![CDATA[rhino]]></category>
		<category><![CDATA[teamcity]]></category>
		<category><![CDATA[testlol]]></category>
		<category><![CDATA[unit testing]]></category>
		<category><![CDATA[war]]></category>

		<guid isPermaLink="false">http://www.michelboudreau.com/?p=658</guid>
		<description><![CDATA[I was recently asked to work on an internal project ...]]></description>
			<content:encoded><![CDATA[<p>I was recently asked to work on an internal project for my company using HTML5 and JavaScript. it&#8217;s essentially just a technology showcase that we create for clients; we have many of these already completed but when a new technology emerges, we create a new project for it.&nbsp; This particular project wasn&#8217;t all that ground breaking on the visual side; it was more about the server and the messaging protocol which I can&#8217;t divulge just yet.</p>
<p>This is somewhat new territory for me.&nbsp; I&#8217;ve done enough JavaScript back in the day, but haven&#8217;t really touched these new JavaScript frameworks.&nbsp; Of course the language changed (with the frameworks) and then there&#8217;s the obvious presence of HTML5 and CSS3 into the web that&#8217;s definitely upped its game.</p>
<p><span id="more-658"></span></p>
<p>That said, I pretty much had no idea what I was getting into.&nbsp; My main expertise now lies in compiled code for enterprise projects (mostly Flex) that has its own automation process.&nbsp; It was efficient and helpful; it made me happy.&nbsp; Now I&#8217;m thrown back in a world of &#8216;archaic&#8217; non-compiled language, or so I thought.</p>
<p>First thing&#8217;s first, I needed to seek tooling for this language that could automate the process.&nbsp; In my experience, most JavaScript projects would use Ant to package the project together for deployment.&nbsp; I&#8217;ve grown past Ant and have used Maven for most of my Flex projects for around 2 years now.&nbsp; It&#8217;s a great automation tool that takes a bit of time to set it up, but it vastly improves the process of compiling, testing and deploying.&nbsp; What I wanted to do is find a Maven plugin that would unit test the code, compress the files, then package it all into a WAR file for easy deployment.&nbsp; Seemed easy enough.</p>
<p><strong>It wasn&#8217;t.</strong></p>
<p>Apparently, most JavaScript developers don&#8217;t even know what Maven is, let alone unit testing or a continuous integration engine.&nbsp; This frustrated me to no end;&nbsp; how can a developer not know about tools that make the process simpler, more efficient and reduce human error?&nbsp; Googlin&#8217; didn&#8217;t offer much help either; there is very little to no documentation about this process, which led me to write this post.</p>
<p>I found a few maven plugins but most of them were severely lacking in documentation, meaning that I was poking and prodding blindly with the hope that the plugin would output something useful.&nbsp; This went on for a few days with little progress until I stumbled upon a plugin called <a href="https://github.com/bodil/testlol" target="_blank">Testlol</a> made by <a href="http://bodil.tv/" target="_blank">Bodil Stokke</a>.&nbsp; It was well documented and made it easy for me to integrate it into my maven build.&nbsp; This particular plugin runs unit tests through Rhino (a headless java browser), outputs the results, runs <a href="http://www.jslint.com/" target="_blank">JSLint</a> (a code quality tool) and packages everything in a War file.&nbsp; Perfect!&nbsp; I just needed to run Yahoo&#8217;s JavaScript compressor through an <a href="http://alchim.sourceforge.net/yuicompressor-maven-plugin/index.html" target="_blank">aptly named plugin</a> before packaging it.</p>
<p>It only took me a few hours to figure it out once I found the Testlol plugin, but I still spent days trying many other undocumented plugins before I arrived to a solution.  I couldn&#8217;t seem to find an example for a Pom that I could use on my project, as if nobody has ever done it before or at least didn&#8217;t blog about it.&nbsp; I asked questions on forums and several IRC JavaScript channels but they all fell on deaf ears.&nbsp; On my third day of trying to figure out this problem, It donned to me why nobody knew about Maven or automation: most JavaScript developers are not developers, they&#8217;re &#8220;scripters&#8221;.&nbsp; After reading some of the IRC logs, it seemed obvious that most do not understand the concept of OOP, design patterns, frameworks or even MVC.&nbsp; I&#8217;m not saying *all* of them are like that. I know many great JavaScript developers like my colleague and friend <a href="http://davidpadbury.com/" target="_blank">David Padbury</a>; but the truth of the matter is that real developers in the JavaScript world are few and far in between.</p>
<p>That being said, I turned my frustration into an opportunity to help others.&nbsp; Here is the Pom I&#8217;ve used on this project.&nbsp; The documentation on each respective plugin are found at the links posted above.  Hopefully this will help another developer.</p>
<p><strong>pom.xml</strong></p>
<pre class="brush: xml; title: ; notranslate">
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;
	xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 

http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;

	&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;

	&lt;groupId&gt;com.company.coldsteel&lt;/groupId&gt;
	&lt;artifactId&gt;client&lt;/artifactId&gt;
	&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
	&lt;packaging&gt;war&lt;/packaging&gt;

	&lt;name&gt;Project ColdSteel&lt;/name&gt;
	&lt;url&gt;&lt;/url&gt;

	&lt;!-- Extra plugin repositories other than the usual ones under the maven repo --&gt;
	&lt;pluginRepositories&gt;
		&lt;pluginRepository&gt;
			&lt;name&gt;oss.sonatype.org&lt;/name&gt;
			&lt;id&gt;oss.sonatype.org&lt;/id&gt;
			&lt;url&gt;http://oss.sonatype.org/content/groups/public&lt;/url&gt;
		&lt;/pluginRepository&gt;
	&lt;/pluginRepositories&gt;

	&lt;!-- the dependencies to get from the server for this to work --&gt;
	&lt;dependencies&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;tv.bodil&lt;/groupId&gt;
			&lt;artifactId&gt;maven-testlol-plugin&lt;/artifactId&gt;
			&lt;version&gt;1.2.2&lt;/version&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;net.alchim31.maven&lt;/groupId&gt;
			&lt;artifactId&gt;yuicompressor-maven-plugin&lt;/artifactId&gt;
			&lt;version&gt;1.1&lt;/version&gt;
		&lt;/dependency&gt;
	&lt;/dependencies&gt;

	&lt;build&gt;
		&lt;plugins&gt;
			&lt;plugin&gt;
				&lt;groupId&gt;net.alchim31.maven&lt;/groupId&gt;
				&lt;artifactId&gt;yuicompressor-maven-plugin&lt;/artifactId&gt;
				&lt;version&gt;1.1&lt;/version&gt;
				&lt;executions&gt;
					&lt;execution&gt;
						&lt;id&gt;compress&lt;/id&gt;
						&lt;phase&gt;package&lt;/phase&gt;
						&lt;goals&gt;
							&lt;goal&gt;compress&lt;/goal&gt;
						&lt;/goals&gt;
						&lt;configuration&gt;
							&lt;nosuffix&gt;true&lt;/nosuffix&gt;
						&lt;/configuration&gt;
					&lt;/execution&gt;
					&lt;!-- Skip over JSLint, testlol already does it --&gt;
					&lt;execution&gt;
						&lt;id&gt;jslint&lt;/id&gt;
						&lt;phase&gt;install&lt;/phase&gt;
						&lt;goals&gt;
							&lt;goal&gt;jslint&lt;/goal&gt;
						&lt;/goals&gt;
						&lt;configuration&gt;
							&lt;skip&gt;true&lt;/skip&gt;
						&lt;/configuration&gt;
					&lt;/execution&gt;
				&lt;/executions&gt;
			&lt;/plugin&gt;
            &lt;plugin&gt;
                &lt;groupId&gt;tv.bodil&lt;/groupId&gt;
                &lt;artifactId&gt;maven-testlol-plugin&lt;/artifactId&gt;
                &lt;version&gt;1.2.2&lt;/version&gt;
                &lt;executions&gt;
                    &lt;execution&gt;
                        &lt;phase&gt;test&lt;/phase&gt;
                        &lt;goals&gt;
                            &lt;goal&gt;test&lt;/goal&gt;
                        &lt;/goals&gt;
                        &lt;configuration&gt;
                            &lt;!-- path to the javascript folder, more on this later --&gt;
                            &lt;basePath&gt;src/main/webapp/javascript&lt;/basePath&gt;
                            &lt;!-- path to the test folder, more on this later --&gt;
                            &lt;testSuite&gt;src/test/javascript/&lt;/testSuite&gt;
                            &lt;globalFiles&gt;
                                &lt;!-- Files needed to able to run tests --&gt;
                                &lt;param&gt;src/main/webapp/javascript/jquery/jquery.js&lt;/param&gt;
                                &lt;param&gt;src/main/webapp/javascript/someclass.js&lt;/param&gt;
                            &lt;/globalFiles&gt;
                        &lt;/configuration&gt;
                    &lt;/execution&gt;
                &lt;/executions&gt;
            &lt;/plugin&gt;
        &lt;/plugins&gt;
	&lt;/build&gt;
&lt;/project&gt;
</pre>
<p>From here, you simply need to install Maven, use the command line to change directory to the project and run &#8216;mvn clean install&#8217;.&nbsp; Everything will be then tested, quality controlled, compressed and packaged for you.&nbsp; However, for this to work you project need to adhere to a specific folder structure for it to work.&nbsp; Here&#8217;s an example of said structure:</p>
<p><a href="http://www.michelboudreau.com/wp-content/uploads/2011/01/folderstructure.png"><img class="aligncenter size-full wp-image-665" title="folder structure" src="http://www.michelboudreau.com/wp-content/uploads/2011/01/folderstructure.png" alt="" width="450" height="465" /></a><br />
This is the usual structure where you separate out the JavaScript part (main/javascript) from the html (main/webapp) and extra assets (main/resources) which the plugin aggregates together when compiling.&nbsp; The only problem with this is that it makes it very hard to do rapid prototyping since you need to compile it after every change to see it updated in the browser.&nbsp; To increase the efficiency of development, I instead opt to move the&#8217; javascript&#8217; folder and &#8216;resources&#8217; folder into the &#8216;webapp&#8217; folder.&nbsp; This way I can work directly from the &#8216;webapp&#8217; directory and the packager doesn&#8217;t care.&nbsp;  You can see these changes in the pom above.  Here&#8217;s what my current directory structure looks like:</p>
<p><a href="http://www.michelboudreau.com/wp-content/uploads/2011/01/folderstructure2.png"><img src="http://www.michelboudreau.com/wp-content/uploads/2011/01/folderstructure2.png" alt="" title="folder structure " width="450" height="500" class="aligncenter size-full wp-image-669" /></a></p>
<p>One important part of this is the &#8216;test&#8217; folder;&nbsp; the plugin automatically runs every file within this folder using <a href="http://www.jsunit.net/" target="_blank">JSUnit</a> unit testing library.&nbsp; The reports are then compiled and outputted to the prompt as well as a detailed xml report created in the target directory.</p>
<p>Your project is now enterprise ready.  You can now integrate this within an automation engine like Teamcity or Hudson and make it compile every time a developer enters code and send an email out if there&#8217;s a failure.  Just be sure to write lots of test to capture some of the possible bugs within the code base and let the system work its magic.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michelboudreau.com/2011/01/19/enterprise-html5-javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Parsley Model-View-Mediator Architecture</title>
		<link>http://www.michelboudreau.com/2010/07/12/parsley-model-view-mediator-architecture/</link>
		<comments>http://www.michelboudreau.com/2010/07/12/parsley-model-view-mediator-architecture/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 04:52:43 +0000</pubDate>
		<dc:creator>Michel Boudreau</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[Jens Halm]]></category>
		<category><![CDATA[lab49]]></category>
		<category><![CDATA[mediator]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[parsley]]></category>

		<guid isPermaLink="false">http://www.michelboudreau.com/?p=295</guid>
		<description><![CDATA[For those who have used Parsley as their application framework ...]]></description>
			<content:encoded><![CDATA[<p>For those who have used Parsley as their application framework knows just how powerful it can be. However, there is something that has annoyed me slightly over time.</p>
<p style="text-align: left;">When I&#8217;m designing a system, I always try to use proper Flex practices. Practices like using MVC to separate components and business logic, making components truly encapsulated and reusable, etc.  The problem that I find with Parsley is that it only allows you to use Injection based views for its MVC architecture; the View knows something, either a Presenter or a Model, and it&#8217;s always injected in by the Context.&nbsp; The problem is, if you have several projects that need the same components but different frameworks, you can&#8217;t freely interchange those components between projects since the view is tightly intertwined with the Parsley injection.</p>
<p style="text-align: left;"><span id="more-295"></span>A way to solve this by using the Mediator pattern (The View knows nothing, but the Mediator knows about the View) because it makes your view extremely portable between projects and forces the developers to use better practices since the only way to communicate with the Mediator is through events.<a href="http://www.michelboudreau.com/wp-content/uploads/2010/07/mediator.png"><img class="aligncenter size-full wp-image-344" title="Mediator Pattern" src="http://www.michelboudreau.com/wp-content/uploads/2010/07/mediator.png" alt="" width="415" height="220" /></a></p>
<p style="text-align: left;">Luckily, Parsley has several extension points which you can insert custom classes to change or add functionality.&nbsp; This gave me an opportunity to create my own parsley tag aptly named &#8216;Mediator&#8217;.&nbsp; What this allowed me to do is to create a Mediator class that is controlled by Parsley and when the view is created; an event would get dispatched from the View and Parsley would then create a Mediator class and inject the view into it.&nbsp; This way, the view never knows anything about the framework which leaves the components to be freely interchangeable between projects.</p>
<p><span style="color: #ff0000;">WARNING: The following code only works with <a href="http://www.spicefactory.org/parsley/download.php" target="_blank">Parsley 2.3 and higher</a>.&nbsp; I made it this way because some major changes have been made to the extension points in 2.3.</span></p>
<p>You can <a href="http://www.michelboudreau.com/wp-content/uploads/2010/07/ParsleyMediatorExample.zip">download the sample application</a> I made and look at the files. All you really need is the <a href="http://www.michelboudreau.com/wp-content/uploads/2010/07/Mediator.zip">Mediator</a> library swc and put it in your project.&nbsp; Then you need to specify that you Parsley context will use this Mediator extension by doing the following.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!-- Initialize Parsley like you would normally --&gt;
&lt;spicefactory:ContextBuilder config=&quot;{Config}&quot;&gt;
	&lt;!-- Except add the mediator configuration within it --&gt;
	&lt;!-- Alternatively, you can use Mediator.initialize(); instead of the mxml tag --&gt;
	&lt;mediator:Mediator /&gt;
&lt;/spicefactory:ContextBuilder&gt;
</pre>
<p>And that&#8217;s it.  By including the Mediator class within your Context, Parsley knows how to change the extension point for it to work.</p>
<p><strong>UPDATE: </strong>Instead of giving you the raw files, I&#8217;ve packaged them in an easy to use library.&nbsp; You can now find the <a href="http://www.michelboudreau.com/wp-content/uploads/2010/07/ParsleyMediator.zip">source for the library here</a>.</p>
<p><strong>UPDATE 2: </strong> I&#8217;ve updated the files for the latest 2.3M3 changes in Parsley.</p>
<p><strong>UPDATE 3:</strong> <a href="http://www.spicefactory.org/parsley/download.php" target="_blank">Parsley 2.3</a> came out recently and I&#8217;m happy to say that my Mediator still works.</p>
<p><strong>UPDATE 4: </strong>Parsley 2.4 is out and I&#8217;ve updated the mediator and added it to <a href="https://github.com/mboudreau/Parsley-Mediator" target="_blank">GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michelboudreau.com/2010/07/12/parsley-model-view-mediator-architecture/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Mate Flex Framework</title>
		<link>http://www.michelboudreau.com/2009/09/08/mate-flex-framework/</link>
		<comments>http://www.michelboudreau.com/2009/09/08/mate-flex-framework/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 02:04:27 +0000</pubDate>
		<dc:creator>Michel Boudreau</dc:creator>
				<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[mate]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[mxml]]></category>
		<category><![CDATA[swiz]]></category>

		<guid isPermaLink="false">http://www.michelboudreau.com/?p=151</guid>
		<description><![CDATA[In my quest to continually improve my Flex skills, I&#8217;m ...]]></description>
			<content:encoded><![CDATA[<p>In my quest to continually improve my Flex skills, I&#8217;m always on the lookout for new technologies, open source projects and frameworks.  One of them particularly caught my eye when it came out and I haven&#8217;t been able to touch it until recently.</p>
<p><span id="more-151"></span></p>
<p>Ever since I started developing Flex, the only real Enterprise level framework out there that was tried and trusted was Cairngorm.  It tries (emphasis on tries) to implement an <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" target="_blank">MVC</a> pattern in your projects so that it&#8217;s easier to manage and reuse your code.  However, something I&#8217;ve noticed over the years is that Adobe Consulting, the people that made Cairngorm, are not exactly great developers.  This is very apparent with the framework they put out because even though they say that it&#8217;s an MVC framework, it is not.  It&#8217;s very far from a good MVC pattern, but since it was the only one out there, a lot of developers didn&#8217;t have a choice other than creating a new one from scratch.</p>
<p>Fortunately, this has recently changed with a plethora of new frameworks that actually do implement MVC properly.  The two most notable are <a href="http://code.google.com/p/swizframework/" target="_blank">Swiz</a> and <a href="http://mate.asfusion.com/" target="_blank">Mate</a>.  Both are really good, however only Mate utilizes Flex to its full potential since most of it can be done with MXML.  It makes it very easy to use and actually quite fun to code with.</p>
<p>In the spirit of supporting and using this fine open source project, I registered another channel on <a href="irc://irc.freenode.net/">Freenode</a> called <a href="irc://irc.freenode.net/flex-mate">#flex-mate</a>.  This would be an open discussion channel about the Mate framework.  If you&#8217;re in any way related to the Mate framework, I strongly suggest you come visit the channel and support this amazing project.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michelboudreau.com/2009/09/08/mate-flex-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 1/28 queries in 0.009 seconds using disk: basic
Object Caching 486/567 objects using disk: basic

Served from: www.michelboudreau.com @ 2012-05-21 07:20:54 -->
