Open Source Flex Development Frameworks Show that Platform is Gaining Momentum

Adobe Flex and the technologies surrounding it are becoming mainstream in the RIA space. Even though the Flex community is still much smaller than those of Java or Microsoft platform, it's growing steadily with significant contributions from dedicated Flex RIA developers. This has resulted in the creation of a number of open source developer frameworks:

Cairngorm is the oldest and the most mature Flex framework. It's currently owned and opensourced by Adobe and is used extensively by Adobe's RIA consulting services. The team at Adobe Consulting who built Cairngorm have been the earliest advocates of design pattern frameworks for RIA development. Cairngorm adapters feature many MVC based design patterns widely seen in JEE world, even though it's a micro-architecture framework that resides and serves exclusively for RIA user interface development.

Cairngorm is considered a enterprise RIA development framework. Its layered MVC implementation helps development a scalable RIA application with complex business logics. On the asynchronous communication, event driven and none-threaded Flex platform, Cairngorm provides a rapid and reliable way of construct a serious business application.

The nature of Cairngorm also determines that it may not suite a small or quick prototype application. As Adobe states:

The Cairngorm microarchitecture is intended as a framework for Enterprise RIA developers. If you are writing a very simple application (such as a prototype application) or an application with only a single view, then you might consider a "Model 1" solution that doesn't strive for the same separation of model, view, and control that Cairngorm advocates. The benefits of the Cairngorm architecture are realized when developing complex RIA applications with multiple use-cases and views, with a team of developers, and with a multi-disciplinary development team that includes designers as well as creative and technical developers.

This is actually an ActionScript 3 framework. Unlike Cairngorm, It has no dependency on any Flash, Flex or other Adobe's AS3 classes, therefore, it can be used to develop any Flash based or ActionScript 3 application.

As its name suggested, PureMVC is implemented according to the MVC design pattern, which includes three layers, model, view and controller. This framework is very well documented and its web site contains very rich information to help developers get started.

Since PureMVC is implemented purely on ActionScript, which is a strongly-typed, fully object-oriented language based on the same standard as JavaScript (ECMAScript), it can be relatively easier to be ported to other OO languages. In fact, according to PureMVC,

I'm happy to announce that there are ports to 4 different languages in progress: AS2, C#, Java, and ColdFusion, nearing public readiness. This puts PureMVC on FlashLite, .NET, Windows Mobile, Silverlight, J2ME, SE, EE, and well... ColdFusion :)

These ports as well as lots of demos and utilities are being written by a dedicated group of contributors spread all over the world. Translators are also signing on and being sought to help expand the PureMVC documentation into other spoken languages, such as French, German, Russian, Chinese, Japanese, etc. Their tireless efforts are turning what was a simple, one man project into a truly global open-source effort. Soon, you'll know them and love them for the quality of work that they are committing to the repositories as I write this. Later, when you see one of these people, by them a beer!

Considering that ActionScript (ECMAScript) will be built into next generation Firefox along with the same Flash engine Adobe is using, PureMVC can be a very useful handy tools for RIA developers to develop cross platform rich applications.

Model-Glue:Flex is another simple MVC based Flex framework. Joe Rinehart, the author of original Model-Glue for ColdFusion port it to Flex. There are positive comments about Model-Glue: Flex. It's design to be more lightweight than framework such as Cairngorm and PureMVC, which makes it easier for quick prototyping or simple Flex application development.

The ServeBox Foundry ( sbasfoundry ) is an ActionScript 3 / Java framework designed for Flex 2 applications development. Its design is based on several design patterns, and includes tools built to resolve some of the recurrent Flex 2 development issues : Model-View sync, screen-browsing, Access-Control Lists (currently in development), localization and labels externalization, etc.

Foundry is designed and implemented for mid to large scale enterprise RIA system development. It includes Java common module to tight integration between Foundry flex plug-in and server side processes.

Guasax is an ease of use programming framework to provide ordered and scalable Flex applications. Life cycle of guasax framework is based in the MVC pattern to take on our program actions. One uniqueness of Guasax is that they use a XML file to configure the actions in the business logic, which reassemble some aspects of Java Struts framework. Guasax can be extended by developing guasax components.

Aral Balkan initially developed ARP (Ariaware RIA Platform) a ActionScript based framework and now it's hosted as one of Open Source Flash projects. ARP currently supports Macromedia? Flash? and Flex based RIA Development in ActionScript 2 and ActionScript 3.

ARP could be the oldest framework developed for the Flash community. The first version of ARP, in Flash 5, was created in 2000 and parts were released under the open-source FC-Lib library. This evolved, in time, to Flash MX and parts were again released as open source as part of the Moose library. Since it's evolved from Flash, ARP can be used in Flex or AIR now. Its codes directly access Flash classes so that it's reported having better performance comparing to other Flex based frameworks.

Flest is an ActionScript3 / Flex application framework for building enterprise level RIAs. It uses such design pattern as Controller, Factory, Command, etc. High efficiency, simplicity and practicality were set as its mandatory design features. Flest Framework was designed and built to be a lightweight and easy to use toolset that helps to structure the deveopment environment on the one hand, and gives a developer maximum freedom in making his/her own decisions on the other.

In addition to the development framework for building RIA UI, there are other frameworks and resources offer helping hands to RIA developers, such as FlexUnit (a unit test framework for ActionScript 3), FlexLib(an Open Source Flex 2 Component Library), AS3CoreLib (an ActionScript 3.0 library for several basic utilities with great JSON package) and Granite DS (a free, open source, alternative to Adobe Data Services for J2EE application servers with EJB3/Spring/Pojo services support), to name a few.

InfoQ will continue reporting new development among Flex open source development community.

We are currently building a large scale system that has a Flex front end and a J2EE back end.

Initially, we were uncertain how to design the flex front end component since we had little experience in anything other than Java web presentation technologies. We found Cairngorm to be a fantastic micro-architecture that guided us through our design and implementation, yet allowed us to deviate when we needed a different approach.

You might argue that this isn't the same thing but in my mind Wrapper code.google.com/p/htmlwrapper/ is very much a framework to consider when building a web server based application. If you believe in the idea that the logic should be on the server and your view should simply be displaying your content Wrapper can be a great tool to build RIAs that has many advantages over the other concepts. It is still early in its development but there is a lot there.

I'm gonna come right out and say that the use of a framework with Flex may be a little overkill. If you compare it to the construction of an application using something like Swing, Flex is much simpler and, IMO, more productive approach. Flex has a very capable event system and very robust uses for data binding. Most of these frameworks try to re-write the event system in Flex and add a lot of boiler plate code that spawn code generator tools and so on. I actually find it kind of amusing that I encounter more material on the web about Flex frameworks rather than good practices for coding in Flex.

Also, I'd like to throw Simeon Bateman's easyMVC (projects.simb.net/easyMVC/) framework out there as well. It's the only Flex framework I've seen thus far that takes advantage of Flex's built in event system. I still don't advocate the use of frameworks in Flex, but if you have to use one, it looks much simpler than the rest. That being said I haven't used it, sorry Sim :)

#, I used Cairngorm for a while, then played with a DI framework called Swiz, but it didn't quite fit my needs so I ended up writing my own Dependency Injection Framework... I just released it on Google Code. I call it "Mainline." I'll be posting some examples and advanced usage tips over on my site over the next few days.