| ////////////////////// |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, |
| * either express or implied. |
| * See the License for the specific language governing permissions |
| * and limitations under the License. |
| ////////////////////// |
| |
| [[core-api-structure,Structure]] |
| = Structure = |
| Polygene™ promotes a conventional view of application structure, that computer science has been using for decades. |
| |
| The definition is as follows; |
| |
| * One Application per Polygene™ runtime instance. |
| * One or more Layers per Application. |
| * Zero, one or more Modules per Layer. |
| * Zero, one or more Assemblies per Module. |
| |
| The principle of this Structure is to assist the programmer to create well modularized applications, that are easily |
| extended and maintained. Polygene™ will restrict access between Modules, so that code can only reach Composites and Objects |
| in Modules (including itself) of the same or lower Layers. |
| |
| Each Layer has to be declared which lower Layer(s) it uses, and it is not allowed that a lower Layer uses a higher |
| Layer, i.e. cyclic references. |
| |
| include::application.txt[] |
| |
| include::layer.txt[] |
| |
| include::module.txt[] |
| |