| #summary Model-View-Controller pattern |
| #labels Phase-Design,Deprecated,Importance-Overview |
| |
| [MelangeIntro Melange] follows |
| [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] patterns |
| at multiple levels. The [SoCOverview SoC framework] provides a set of |
| common [ModelsOverview Model], [ViewsOverview Views], and |
| [ControllersOverview generic Controllers] 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 [ModelsOverview Model] are stored in the |
| [http://code.google.com/appengine/docs/datastore/ Google App Engine 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] and |
| [GHOP GHOP]. 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 [PersonModel Person] 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 |
| [OrganizationModel Organization] [ReviewerModel Reviewer], say, rather than |
| a [ContributorModel Contributor]). |
| |
| == Views == |
| |
| Model entities are displayed and modified via a variety of |
| [ViewsOverview Views]. 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 [ControllersOverview Controllers]. |
| |
| === Import and Export Views === |
| |
| In addition to the HTML page views, other special "Views" are used to provide |
| read-write [GDataOverview GData APIs] and read-only [FeedsOverview Atom feeds] |
| 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 |
| [http://code.google.com/apis/gadgets/ Google 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] and [GHOP GHOP]) implements its own |
| [ControllersOverview Controller] 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 [UserRoles user role] [RoleModels Model entities] |
| to decide what other Program entities are viewable or modifiable by a |
| particular |
| [http://www.google.com/support/accounts/ Google Accounts-authenticated] |
| [UserModel User]. |
| |
| [ViewsOverview Views] will submit the Model entity and the |
| [UserRoles specific role] 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_ |
| [http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html Creative Commons Attribution 2.5 License]. |
| [http://creativecommons.org/licenses/by/2.5/ http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png] |