| /* Copyright 2008 Google Inc. | |
| This work is licensed under a Creative Commons Attribution 2.5 License. | |
| For information, see: | |
| http://creativecommons.org/licenses/by/2.5/ | |
| For the actual license text, see: | |
| http://creativecommons.org/licenses/by/2.5/legalcode | |
| */ | |
| digraph MVCOverview { | |
| /* 11 inches x 96 DPI is 1056 pixels wide */ | |
| size="11,11"; | |
| node [shape=box]; | |
| subgraph cluster0 { | |
| color="white"; | |
| AppEngine | |
| [shape=record style=filled fillcolor=lightgrey color=black | |
| label="{{ <DatastoreAPI> Datastore API | <UsersAPI> Users API | <DjangoForms> Django Forms }| Google App Engine}"] | |
| 00 [style=invis]; | |
| /* manually assigned "level" ranks to produce an easier-to-read graph */ | |
| { rank=same; | |
| "00"; "AppEngine"; | |
| }; | |
| }; | |
| /* invisible "level" graph to enable assigned of levels to groups of nodes */ | |
| 01 [style=invis]; | |
| 01 -> 00 [style=invis]; | |
| 10 -> 01 [style=invis]; | |
| subgraph cluster1 { | |
| label="SoC Framework"; | |
| node [shape=box style=filled fillcolor=lightgrey color=black]; | |
| SoCModels [label="Common Models (Person, Work, Group, Program, etc.)"]; | |
| SoCViews [label="Common Views (Models, Actions, Reports, etc.)"]; | |
| SoCTemplates | |
| [label="Base Django Templates" shape=ellipse style=solid]; | |
| SoCControllers | |
| [label="Generic Controllers (Auth, Membership, Attach, etc.)" shape=diamond]; | |
| 12 [style=invis]; | |
| 11 [style=invis]; | |
| 10 [style=invis]; | |
| { rank=same; | |
| "12"; "SoCViews"; | |
| }; | |
| { rank=same; | |
| "10"; "SoCControllers"; "SoCModels"; | |
| }; | |
| }; | |
| 13 [style=invis]; | |
| 20 -> 13 [style=invis]; | |
| 13 -> 12 [style=invis]; | |
| 12 -> 11 [style=invis]; | |
| 11 -> 10 [style=invis]; | |
| SoCViews -> AppEngine:DjangoForms; | |
| SoCControllers -> AppEngine:UsersAPI; | |
| SoCModels -> AppEngine:DatastoreAPI; | |
| SoCViews -> SoCModels; | |
| SoCViews -> SoCTemplates [constraint=false]; | |
| SoCModels -> SoCViews [style=dashed constraint=false]; | |
| SoCViews -> SoCControllers [style=dashed]; | |
| SoCControllers -> SoCViews [constraint=false]; | |
| SoCControllers -> SoCModels [constraint=false]; | |
| subgraph cluster2 { | |
| label="A Melange Web Application"; | |
| style=filled; | |
| color=black; | |
| fillcolor=lightgrey; | |
| node [shape=box style=filled color=black fillcolor=white]; | |
| AppController [label="Application-specific Controller" shape=diamond]; | |
| AppViews [label="Application-unique Views"]; | |
| AppTemplates | |
| [label="Application Django Templates" shape=ellipse style=solid color=white]; | |
| AppModels [label="Application-unique Models"]; | |
| AppEntities | |
| [label="Application Entities" shape=parallelogram style=solid color=white]; | |
| 22 [style=invis]; | |
| 21 [style=invis]; | |
| 20 [style=invis]; | |
| { rank=same; | |
| "22"; "AppViews"; "AppTemplates"; | |
| }; | |
| { rank=same; | |
| "21"; | |
| }; | |
| { rank=same; | |
| "20"; "AppModels"; "AppController"; "AppEntities"; | |
| }; | |
| }; | |
| 22 -> 21 [style=invis]; | |
| 21 -> 20 [style=invis]; | |
| AppModels -> SoCModels; | |
| AppViews -> SoCViews; | |
| AppController -> SoCControllers; | |
| AppViews -> AppModels; | |
| AppModels -> AppViews [style=dashed constraint=false]; | |
| AppViews -> AppController [style=dashed]; | |
| AppController -> AppViews [constraint=false]; | |
| AppController -> AppModels [constraint=false]; | |
| AppViews -> AppTemplates [constraint=false]; | |
| AppModels -> AppEntities; | |
| } |