| [Melange](MelangeIntro.md) follows |
| [Model-View-Controller](http://en.wikipedia.org/wiki/Model-view-controller) patterns |
| at multiple levels. The [SoC framework](SoCOverview.md) provides a set of |
| common [Model](ModelsOverview.md), [Views](ViewsOverview.md), and |
| [generic Controllers](ControllersOverview.md) to be used by each Melange |
| web application. Each of those applications is then similarly arranged |
| in a Model-View-Controller pattern. |
| |
| ## Models |
| |
| Entities of each [Model](ModelsOverview.md) are stored in the |
| [Google App Engine Datastore](http://code.google.com/appengine/docs/datastore/). All |
| data for a given instance of a particular Program is stored in Model entities |
| in the Datastore. The SoC framework Models are designed so that they can be |
| used in a variety of Program formats, including both [GSoC](GSoC.md) and |
| [GHOP](GHOP.md). Other Melange Models not in the SoC framework are specific to |
| a particular Program. |
| |
| The Models are also designed so that, while entities are specific to a given |
| year of a particular Program, entities can be _imported_ from one Program |
| instance to another. For example, a [Person](PersonModel.md) need not re-enter |
| all of their personal information to participate in another, future Program, |
| even if their participation is going to be in a different role (an |
| [Organization](OrganizationModel.md) [Reviewer](ReviewerModel.md), say, rather than |
| a [Contributor](ContributorModel.md)). |
| |
| ## Views |
| |
| Model entities are displayed and modified via a variety of |
| [Views](ViewsOverview.md). Some views simply display entities or lists of |
| entities, while other views are forms for creating and altering entities. |
| The Melange views are implemented using Django templates and forms. |
| Many of these views are shared and re-used between different Programs and |
| their Program-specific [Controllers](ControllersOverview.md). |
| |
| ### Import and Export Views |
| |
| In addition to the HTML page views, other special "Views" are used to provide |
| read-write [GData APIs](GDataOverview.md) and read-only [Atom feeds](FeedsOverview.md) |
| and CSV file exports. These GData APIs, Atom feeds, and CSV files provide |
| import and export capabilities for Program entities. |
| |
| The Melange GData APIs will also make it possible to implement alternative |
| front-ends capable of viewing and manipulating, say, one Organization's data. |
| Such a front-end could be implemented in any programming language that can be |
| used to implement a GData client. Such Organization-specific front-ends could, |
| for example, be embedded in the Organization's web site. These GData APIs |
| could also be used to create widgets such as |
| [Google Gadgets](http://code.google.com/apis/gadgets/) that monitor or alter small |
| aspects of a Program. |
| |
| Atom feeds make it possible to monitor activity during the course of a |
| Program **without** resorting to email, using a _pull_ approach instead of the |
| existing email _push_ method. |
| |
| ## Controllers |
| |
| Each separate program (e.g. [GSoC](GSoC.md) and [GHOP](GHOP.md)) implements its own |
| [Controller](ControllersOverview.md) containing the "business logic" of the |
| program (though in the case of these two examples, much of the code in the |
| two Controllers is expected to be shared). It will be possible to support |
| Program formats that have not yet been conceived by adding new Controller |
| modules to the framework. Since Melange is being released under an Open Source |
| license, new Sponsor organizations could implement their own custom Program |
| while reusing much of the SoC framework code. |
| |
| ### Security and Roles |
| |
| The Controllers make use of [user role](UserRoles.md) [Model entities](RoleModels.md) |
| to decide what other Program entities are viewable or modifiable by a |
| particular |
| [Google Accounts-authenticated](http://www.google.com/support/accounts/) |
| [User](UserModel.md). |
| |
| [Views](ViewsOverview.md) will submit the Model entity and the |
| [specific role](UserRoles.md) to an "authorization" method in the Controller. |
| This method will indicate what privileges (read-only, read-write, |
| not-authorized, etc.) that specific User in that specific Role has for |
| that specific Model entity. These authorization methods in the Controller |
| can also provide error indications and descriptive text that can be |
| displayed to the User by the View. |
| |
| |
| |
| --- |
| |
| _Copyright 2008 Google Inc._ |
| _This work is licensed under a_ |
| [Creative Commons Attribution 2.5 License](http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html). |
| [](http://creativecommons.org/licenses/by/2.5/) |