## SoC, the Spice of Creation framework

SoC is the software framework, implemented in [Python](http://www.python.org),
that underpins the [Melange](MelangeIntro.md) project.  This framework is
designed to make it possible to host Melange applications, such as the
[Google Summer of Code](GSoC.md) <sup>TM</sup> and the
[Google Highly Open Participation](GHOP.md) <sup>TM</sup> Contest on the
[Google App Engine](http://code.google.com/appengine/).

The framework follows a ModelViewController pattern.  Entities of each
[Model](ModelsOverview.md) are stored in the
[Google App Engine Datastore](http://code.google.com/appengine/docs/datastore/).
Sharing the Models between different [Melange](MelangeIntro.md) web
applications not only promotes code reuse, it also permits similar
real-world programs to import and export entites and share them.

A variety of [Views](ViewsOverview.md) are implemented using Django templates
and forms.  Other possible Views are implemented as
[GData APIs](GDataOverview.md) and [Atom feeds](FeedsOverview.md).  Since the
Views are accessing entities of common Models shared amongst Melange
web applications, much of the code is reused.  In most cases, only
Django templates need to be modified to customize these existng Views
for a specific real-world program.

The different [Controllers](ControllersOverview.md) in the SoC framework
implement the "business logic" that actually forms the core of each separate
[Melange](MelangeIntro.md) web application.  For each real-world program
(e.g. [GSoC](GSoC.md) or [GHOP](GHOP.md)), a web application is created, built on
top of a new Controller that is derived from one of the similar existing
Controllers in the framework.  This pattern encourages code sharing between
the different Melange web applications used to run these different
real-world programs.  Reuse of Controller code is further enhanced by the
Models and Views that are shared between Melange web applications.

### Contributing

Please see the [guidelines for contributors](ContributionTerms.md) if you are
interested in contributing to the design and development of the SoC
framework.


---

_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://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png)](http://creativecommons.org/licenses/by/2.5/)