====== Normes de codage pour les versions 1.5 (2010) ======
Ce document est à l'état de brouillon, il est susceptible d'être modifié à tout moment.
===== Configuration =====
* La configuration est constituée de plusieurs fichiers XML
* Chaque fichier est chargé séquentiellement, selon un ordre établi
* Chaque nouveau fichier chargé complète et/ou remplace les informations de configuration déjà définies par un fichier précédemment chargé
* Les fichiers de configuration sont placés dans le dossier ''application/config/''
[[config-system-xml|Contenu du fichier system.xml]]
==== Fichier system.xml ====
* Le premier fichier à être chargé est le fichier ''system.xml'', qui définit les valeurs par défaut des options de configurations requises par l'application
==== Fichier local.xml ====
* Le second fichier de configuration à être chargé est le fichier ''local.xml'', il remplace une partie des valeurs définies par [[#fichier-systemxml|le fichier system.xml]] avec les valeurs propres au serveur.
==== Fichiers de chargement de modules ====
* Une fois les fichiers [[#fichier-systemxml|system.xml]] et [[#fichier-localxml|local.xml]] chargés, l'ensemble des fichiers XML du dossier ''modules/'' sont chargés à leur tour et ajoutés à la configuration.
* Ces fichiers n'ont pour seul but que de lister les modules présents sur le serveur
* Chaque élément définissant un module renseigne également si le module est activé ou non et quelle est la [[#plage-de-code-code-pool|plage de code]] dans laquelle il se trouve
* Un module doit afficher ses dépendances vis-à-vis des autres modules, à l'exception du module ''Nova_Core'' qui définit les classes de base de tous les autres modules.
* Désactiver un module le désactivera pour tous les jeux présents sur le serveur
* Pour charger un module nommé ''Bar'', placé dans l'espace de noms ''Foo'', et dépendant du module ''Nova_Core'', il suffit de créer un fichier XML dans ce dossier avec le contenu suivant :
core
true
==== Fichiers de configuration des modules ====
* Dès que tous [[#fichiers-de-chargement-de-modules|les fichiers du dossier modules/]] sont chargés, la configuration de chacun des modules est ensuite chargée.
* Chaque module doit avoir un fichier de configuration nommé ''config/module.xml''
* Ce fichier de configuration détermine la configuration pour les [[#forges-de-classes|forges de classes]] fournies par la classe ''Nova'', les fichiers de traductions du modules, ses layouts, les tables qu'il utilise, ect...
===== Plage de code (Code Pool) =====
* Une page de code permet de différencier la provenance du code source des modules qu'il contient
* Les plages sont placés dans le dossier ''application/code/''
* Il existe 3 plages de code : ''core'', ''community'' et ''local''
* La plage ''core'' est géré par l'équipe de développement de XNova, **modifier le contenu de ce dossier vous empêchera de mettre à jour votre jeu à l'avenir**.
* La plage ''community'' contient les modules fournis par la communauté et géré par un de ses membres, **modifier le contenu de ce dossier vous empêchera de mettre à jour vos modules communautaires à l'avenir**
* La plage ''local'' contient votre propre code source, que vous pouvez modifier, selon ce dont vous avez beosoin
==== include_path et plages de code ====
* La directive PHP ''include_path'', permettant de définir les chemins de recherche des fichiers inclus, contient toutes les plages de code dans l'ordre ''local'', ''community'' et ''core''.
* Il devient possible de modifier une classe de la plage ''core'' ou ''community'' en la copiant dans la plage ''local'', dans la même arborescence, puis de la modifier.
===== Espaces de noms =====
* Un espace de noms permet de regrouper plusieurs modules destinés à fonctionner ensemble et ne pas les faire interférer avec d'autres modules qui pourraient porter le même nom.
* Un espace de noms est orthographié en ''CamelCase'' ((Chacun des mots est accolé à son voisin de gauche, toutes les lettres sont en minuscule à l'exception de la première lettre de chaque mot))
* Un espace de noms est représenté dans l'arborescence par un dossier placé dans une plage de code
===== Modules =====
* Un module regroupe plusieurs classes en un groupe de fonctionnalités ne pouvant pas être séparées les unes des autres.
* Un module doit être identifié de façon unique dans l'arborescence, le code source et la configuration
* Un module doit faire partie d'un espace de noms
* Un espace de noms est orthographié en ''CamelCase'' ((Chacun des mots est accolé à son voisin de gauche, toutes les lettres sont en minuscule à l'exception de la première lettre de chaque mot))
* Un module se nomme d'après un nom commun au singulier, en anglais
* Toutes les classes d'un module se nomment d'après le nom de l'espace de nom et du nom du module. Exemples:
* ''EspaceDeNom_Module_Foo_Bar''
* ''Nova_Core_Object''
* ''Nova_User_Model_User''
===== Classes =====