| [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/) |