FrameBeurk documentation

9. Développement

Ce chapitre tente d’exposer concrètement une approche méthodologique descendante (top-down) du développement dans FrameBeurk d’applications de gestion au sens général, c’est-à-dire saisie de données, stockage et restitution - les traitements de ces données restant relativement simples (par exemple les calculs complexe ou modélisations sophistiquées ne sont peut-être pas adaptées).

Tout au long de ce tutoriel, sans que vous y soyez explicitement invités, il est recommandé de se reporter à la documentation descriptive du framework.

Exemple utilisé dans les paragraphes suivants :
Une application web de partage de musique

9.1. Etape 1 : Actions, entités, modules

9.1.1. Recherche des actions

Cette étape doit répondre à la question : Quelles seront les actions que les utilisateurs de l’application pourront effectuer ? Sans distinction de profil d’utilisateurs, de précision sur l’enchainement des actions…
La réponse prend la forme d’une liste d’énoncés très simples « verbe + nom ». De cette liste doit émerger un nombre restreint de noms : Ce seront les entités auxquelles s’appliqueront les actions –les verbes.

Exemple :
Crée Bande, affiche Bande, liste Bande, crée Album, affiche Album, crée Morceau, modifie Morceau, supprime Morceau, vote Morceau, crée Commentaire…

Conseils :

Exemple :
Exemple :
« affiche Morceaux de l’Album » correspondrait à une Vue de l'entité Album qu’on pourrait nommer ainsi : « détaille Album », si « affiche Album » est une Vue présentant d’autres données.

9.1.2. Classement des actions

Dans la liste d’actions déterminée ci-dessus, il faut distinguer :

Exemple :
« crée Morceau » nécessite l’envoi d’un formulaire (donc une Vue), pas « vote Commentaire » qui est un simple bouton sur la page.

9.1.3. Classement des entités

La liste des actions a fait émerger une liste d’entités et il faut s’interroger sur l’intérêt de regrouper toutes ces entités dans le même module ou pas. Les séparer dans plusieurs modules entraîne une complexité et un coût supérieur par la gestion des appels de fonction entre modules indépendants (tissage), par la multiplication des fichiers de configuration, sql, css, js….

Le choix de la séparation en plusieurs modules répond aux questions : Est-ce que ce sous-groupe d’entités fortement couplées est faiblement couplé avec les autres ? Est-ce qu’il est susceptible d’être utilisé en dehors du contexte de cette application ?

9.2. Etape 1 : implémentation

9.2.1. Création de l’arborescence

Cette étape consiste à créer les répertoires et fichiers à vide du (des) modules, selon l’arborescence décrite au chapitre 4.2 (lecture fortement conseillée).


9.2.2. Initialisation du fichier .sql

Ce fichier contiendra tous les ordres nécessaires à la création ou mise à jour des objets de base de données lors de l’installation du module. A cette étape, alimenter les tables Beurk_Action et Beurk_TypeEntite avec les actions et entités identifiées.

Exemple :
INSERT INTO `Beurk_TypeEntite` (`TypeEntite`, `Module`) VALUES ('Album', 'Zeek'); INSERT INTO `Beurk_TypeEntite` (`TypeEntite`, `Module`) VALUES ('Bande', 'Zeek'); INSERT IGNORE INTO `Beurk_Action` (`Action`) VALUES ('affiche'); INSERT IGNORE INTO `Beurk_Action` (`Action`) VALUES ('cree'); …

9.3. Etape 2 : Autorisations, clefs

9.3.1. Détermination des autorisations

Pour chaque action identifiée à l’étape précédente, il faut déterminer à quelles conditions les utilisateurs seront autorisés à exécuter ces actions. Pour rappel, ce sont les contrôleurs Maj et Vue qui effectuent cette vérification, en appelant des fonctions apportées par les différents modules et qui sont définies par leurs fichiers de configuration. Si aucune fonction existante ne répond au besoin, il faudra que le module en cours de développement l’apporte.

Les profils apportés par les modules Beurk et Uzers sont :

Exemple :

9.3.2. Estimation des clefs des vues

La clef d’accès à une vue est constituée de l’ensemble des paramètres nécessaires pour pouvoir se repositionner de manière univoque sur la Vue affichée. Dans FrameBeurk, les 3 paramètres obligatoires d’une Vue sont :

Certaines vues peuvent nécessiter des paramètres supplémentaires. Exemples :

Exemple :

9.4. Etape 2 : Implémentation

L’implémentation de l’étape 2 consiste à la déclaration des entités dans le fichier de configuration de module.
Le tableau associatif $CONFIG['Entites'] contient un élément par entité, qui lui-même contient le nom de son module d’appartenance, la liste des Majs et la liste des Vues.

Exemple pour l’entité Bande :
// Entité 'Bande' $CONFIG['Entites']['Bande'] = array(      'Module' => 'Zeek',      'Majs' => array('cree'         => array('Auto' => 'Admin'),                      'supprime'    => array('Auto' => 'AdminEtSomme'),                      'modifie'     => array('Auto' => 'Admin')),      'Vues' => array('affiche'     => array('Auto' => 'Admin',                                         'Clef' => array('NoPage')),                      'cree'        => array('Auto' => 'Admin'),                      'liste'       => array('Auto' => 'Admin',                                              'Clef' => array('NoPage')),                      'supprime'    => array('Auto' => 'Admin'),                      'modifie'     => array('Auto' => 'Admin'),                      'previsualise' => array('Auto' => 'Admin')));

9.5. Etape 3 : Cartes, base de données, queries

9.5.1. Inventaire des Cartes

Une vue est composée de blocs d’informations indépendants nommés Cartes (fonctions PHP qui affichent le code HTML), qui sont réutilisables dans d’autres vues. Les Cartes présentent les données à afficher ainsi que les liens vers les actions de Maj qui sont possibles concernant ces données. Une vue d’une entité A peut afficher une Carte d’une entité B.

Exemple :

9.5.2. Contenu des Cartes

Pour chaque Carte, il faut déterminer quelles seront les données à afficher et les données qui seront nécessaires pour établir les liens hypertextes vers les différentes actions.

Exemple :

9.5.3. Base de données

A cette étape, vous devez être capable de concevoir le modèle de données de chacun de vos modules, à partir des informations déterminées jusqu’à présent. La conception d’un modèle de données est hors du périmètre de ce tutoriel.

Exemple :
Toutes les tables auront un bandeau d’audit comportant l’Id du user qui crée l’enregistrement, les timestamps de création et de modification, un code état.

9.5.4. Inventaire des Queries

En règle générale, une Carte affiche le résultat d’une Query (pour rappel : Une Query est une fonction PHP renvoyant une requête SQL). Les colonnes sélectionnées dans une query doivent donc être adaptées à la Carte à afficher.

Une même carte peut être appelée dans des contextes différents : par exemple sur une vue de détail et sur une vue liste. Il peut donc y avoir plusieurs Queries adaptée à une Carte -la clause de sélection étant l’élément variable.

Exemple :
A l’entité Album seront attachées les queries ramenant :

9.6. Etape 3 : Implémentation

9.6.1. Les Cartes

A suivre… En attendant, s’enivrer des cartes du fichier helpersRhum.php.

9.6.2. Les Tables

Les ordres de créations des tables sont stockés au niveau du module dans le fichier « module<module>.sql ». Ils peuvent être saisis manuellement ou obtenu par export de la description de la table préalablement créée dans phpmyadmin (pour mysql).

Respecter certaines règles permet de mutualiser certains traitements. Par exemple, pour toutes les tables répondant aux 3 points suivants, on pourra utiliser la fonction Uzers_CreateurEntite() pour retrouver le créateur de la ligne :

Exemple :
La table Zeek_Bande aura les colonnes suivantes :
IdBande        clef unique de la table                int(10) unsigned Bande          nom du groupe                          varchar(64) Donnees                                               text IdCreateur     id du créateur de la ligne             int(10) unsigned TsCRE          Timestamp de création                  bigint(20) TsMaj          Timestamp de la dernière mise à jour   bigint(20)

9.6.3. Les Queries

A suivre… En attendant, s’enivrer des queries du fichier modeleRhum.php.

9.7. Etape 4 : Intégration au site

Pour que l’application que vous avez définie aux étapes précédente soit accessible aux utilisateurs, elle doit lui être intégrée et présenter des points d’accès aux entités, par exemple :



© ToolOscope SASU 2010-2015. © Arnaud De Rette 2016-2018. Tous droits réservés.