Managed Hosting



Good Enough MVC
Project Home Blog Forums Known Issues Contact Project

Author: Christopher Dean (All RIAForge projects by this author)
Last Updated: November 16, 2010 7:44 PM
Version: 1.51
Views: 119,464
Downloads: 3,444
License: Apache License, Version 2


Good Enough MVC (GEMVC) is an architectural and application framework for Flex 3 and 4 that provides basic Model-View-Controller (MVC) constructs for your applications. It also includes additional capabilities for events, messaging (producer/consumer), remote services (AMF, SOAP, HTTP) and logging that make GEMVC much more than just an MVC framework. These constructs force applications to be developed in a consistent and maintainable manner regardless of the domain. You can also choose to use part of the framework such as the MVC part or just the services portion allowing GEMVC to be integrated with other frameworks.

The basic tenet of MVC is that separating the Model (the data) from your View ( interface controls and logic) and your Control logic (business logic and service calls that affect the model) provides for easier maintenance since you can modify one portion of the application without affecting other areas. The notion of a Service and Gateway layer that is commonly used with this architectural pattern is also useful in that the data storage mechanism can change without affecting the application because the service layer insulates the application from the data layer. It also makes the code easier to maintain and better performing than having Flex Remoting tags scattered throughout your mxml views.

GEMVC takes a slightly different approach to traditional MVC in that the controller logic is actually in the events and not in the controllers. They act like Notifiers more than controllers and you can have a hierarchy of them. GEMVC also supports the notion of a watchable event that allows a GEMVC event to be dispatched when another GEMVC event is completed. This is especially useful for GEMVC events that need to occur in a particular order.

GEMVC events use the Flex event notification for its dispatch mechanism simplifying the use of GEMVC somewhat since it uses what you, as a Flex developer, already are familiar with.

The GEMVC Model is just an empty interface specifying that you are using the class as model. You can have as many of these as you want but typically you have just one (often with sub-objects).

Views are your usual .mxml files (or .as controls) without any control logic in them (you may have simple GUI manipulation handlers but nothing that would be better handled by a GEMVC event). Controls and Views can have their own controllers and events which enable you to package them together nicely.

The final component of the GEMVC is the support for remoting and messaging services. GEMVC encapsulates the standard RemoteObject, WebService, and HTTPService tags/classes to provide a more programmatic access to these services allowing your applications to reuse the same instance of these classes instead of always destroying and creating objects of these tags. It also removes the hard-coding of any destinations and places them in configuration files for easier maintenance. GEMVC also wraps the Lifecycle Data Services publisher and subscribe classes to provide a uniform service interface. Logging services are also supported as well so you can send log information back to the server for centralized logging and/or emailing.

Recent Blog Entries:


Adobe Flex 3,4

Issue Tracker:

There are no issues for this project.

To enter issues for this (or any other) project, you must be logged in.

Subversion Access:

You may access this project's Subversion repository with your client here: http://svn.riaforge.org/gemvc.

To view files and changelists associated with this repository, go here: http://gemvc.riaforge.org/index.cfm?event=page.svnbrowse.

Anonymous users have read access to the repository while the administrator has write access.

This project is sharing its code via Subversion. Subversion is an open source source control method. You may find more information about Subversion here: http://subversion.tigris.org/