en | fr | Contact  | Imprimer  | Partager

FrameBeurk documentation

2. Principes

Comme tous les frameworks PHP, FrameBeurk est composé d’un ensemble de scripts qui sont hébergés sur une machine serveur distante (*), sur laquelle  est opérationnel un programme serveur http (tel que Apache), équipé d’un module d’interprétation du PHP.

Lorsque le navigateur Internet de l’utilisateur envoie une requête au serveur http, celui-ci exécute les scripts PHP déterminés. Ceux-ci génèrent du code HTML (ou CSS, ou Javascript, ou RSS…) qui est renvoyé au navigateur qui interprète ce code pour afficher une page, ou influer sur l’affichage de la page existante.

(*) : ou installés éventuellement sur la machine de l’utilisateur ou du développeur comme dans le cas de l’utilisation de LAMP/WAMP (pour Linux-Apache-MySQL-PHP, Windows-Apache...)

2.1. Navigation

2.1.1. Transaction

Certaines actions de l’utilisateur dans son navigateur Internet entrainent l’envoi d’une requête http vers le serveur. On nomme transaction ce qui se déroule entre une telle action et la prise en compte de la réponse du serveur par le navigateur, et plus particulièrement les traitements qui ont lieu sur le serveur entre l’arrivée de la requête et l’envoi de la réponse.

Les données serveur de la transaction sont stockées dans le tableau associatif $TRANSAC[].

2.1.2. Dialogue

L’échange de données entre le navigateur internet de l’utilisateur et le serveur se déroule en mode « pseudo-conversationnel ». C’est-à-dire que du point de vue de l’utilisateur, il n’y a pas de discontinuité entre 2 transactions. Côté serveur par contre, l’exécution des scripts est interrompue à l’envoi de la réponse et ceux-ci sont retirés de la mémoire. La discontinuité est donc complète côté serveur.

Pour rétablir la cohérence du dialogue –c’est-à-dire de l’enchainement des transactions, les valeurs des variables qui doivent être rétablies lors de la transaction suivante sont stockée en session : PHP les sauvegardes en dehors du serveur (pour une durée limitée et paramétrable, par exemple 30 minutes).

Les dialogues de plusieurs utilisateurs navigants en parallèle sur le même site sont totalement indépendants.

Les données serveur du dialogue sont stockées dans le tableau associatif $DIALOG[].

2.1.3. Configuration

Framebeurk est modulaire, paramétrable et extensible. Les fonctionnalités et rendus propres au site, et communs à tous les utilisateurs, sont définis par des paramètres qui constituent la configuration de ce site. Afin d’améliorer les performances du framework, la configuration est déterminée lors de la première transaction de l’utilisateur puis stockée en session PHP.

Les données serveur de configuration  sont stockées dans le tableau associatif $CONFIG[].

2.2. Actions

S’agissant d’un framework applicatif, les actions envoyées au serveur et qui sont (habituellement) déclenchées par l’utilisateur (par exemple lorsque celui-ci clique sur un lien ou un bouton) sont de deux sortes :

  • Les actions de Maj (pour Mise à jour) qui vont conduire à une modification des informations gérées par le serveur -typiquement les objets métiers, le plus souvent stockés dans une base de données.
  • Les actions de Vue qui vont restituer des informations, sans modification des valeurs stockées.

Dans FrameBeurk, une transaction sera constituée d’une action Maj et d’une action Vue. Si une action Maj est demandée, elle sera toujours exécutée en premier, car elle peut avoir un impact sur les informations restituées dans la Vue.

Chaque action est déclarée dans le tableau $CONFIG[] et occupe un fichier .php distinct.

C’est le navigateur Internet de l’utilisateur qui envoie au serveur les informations concernant la Maj et/ou la Vue à exécuter, par les paramètres de la requête http.

La requête peut aussi préciser une Vue d’erreur à restituer à la place de la Vue normale, en cas d’erreur lors de la Maj.

2.3. Entités

Comme exposé en début de document, ce framework propose aux développeurs d’effectuer une approche des besoins fonctionnels métier différente de l’Analyse Orientée Objet, avec une implémentation (séquentielle ou procédurale) plus simple que la POO (voir chapitre 9). Pour rester clairement indépendant du paradigme Objet, les équivalents-objets seront nommés Entités.

Essayons cette définition : Une Entité est la projection sur l’interface applicative d’un objet métier, élémentaire ou complexe, qui ne sera jamais défini de manière nucléaire contrairement à la POO. L’Entité portera les actions  de type Maj et/ou Vue accessibles aux utilisateurs.

Chaque entité est déclarée dans le tableau $CONFIG['Entites'][] et occupe un répertoire portant son nom. Ce répertoire (et ses sous-répertoires) contient tous les fichiers de script relatifs à l’entité, dont les actions.

2.4. Modules

Les Entités sont regroupées en ensembles fonctionnellement cohérents nommés Modules.

Chaque module utilisé est déclaré dans le tableau $CONFIG['Controles']['Modules'][] et occupe un répertoire portant son nom, qui contient les entités et toutes les ressources nécessaires à son intégration dans le site :
  • Fichiers de configuration,
  • Scripts SQL de génération des objets de bases de données,
  • Fichiers CSS, Javascripts, PHP…

2.4.1. Dépendances

Les modules peuvent naturellement présenter des dépendances entre eux. L’exemple trivial est celui de l’appel dans un script du module B d’une fonction PHP définie par le module A.

Si le module A déclare « function A_fonct() {…} » et le module B implémente l’appel à cette fonction « $maVar = A_fonct() ; », le module B est dépendant du module A et ne pourra pas s’exécuter sans lui.

La documentation du module B doit explicitement signaler cette dépendance statique.

2.4.2. Tissage

Le langage PHP permet de stocker le nom d’une fonction dans une variable. L’utilisation de cette possibilité permet d’appeler une fonction déclarée dans un autre module sans en être définitivement dépendant.

Si le code du module B utilise un alias (c-à-d une variable) pour appeler une fonction externe au module et que le module A implémente cette fonction, la configuration du site (*) doit associer l’alias utilisé dans le module B à la fonction déclarée dans A. On nomme Tissage cette mise en relation des modules.

La documentation du module B doit spécifier quels sont les alias à valoriser.

Les alias sont déclarés dans le tableau associatif $CONFIG[‘Tissage’][]. Exemple de déclaration :
$CONFIG['Tissage']['ModuleB']['alias'] = 'ModuleA_fonction';

(*) : Le tissage peut être directement configuré au niveau du module A si celui-ci est lui-même dépendant du module B.

2.5. Mise en page

Pour tenter de résumer simplement, la page HTML affichée par le navigateur est un ensemble de boites nommées « div », imbriquées ou juxtaposées, qui contiennent les informations métier. L’agencement des divs entre elles (et leurs rendus) est fixé par la feuille de style (fichier .css) déclarée en début de page HTML et envoyée par le serveur au navigateur.

La mise en page (Layout en Anglais) est en règle générale très stable d’une page à l’autre d’un même site Internet et il est donc intéressant de faciliter la gestion et les traitements qui lui sont associés. Ce framework propose de gérer en configuration la mise en page avec les éléments suivants :

2.5.1. Patron

Le patron définit les principales parties de la page où le contenu sera inséré dynamiquement par un contrôleur (voir plus loin pour cette notion).

Chaque Patron est un fichier .php stocké dans un répertoire portant son nom, qui contient aussi divers autres fichiers : entête, enqueue, fichier CSS, Javascript…

2.5.2. Divs

Le contenu de chaque Div est déclarées en configuration. Typiquement, il s'agit d'un libellé, d'une variable ou d'un fichier PHP à insérer. Lorsqu'il traite une partie du patron, le contrôleur y insère le contenu des Divs dont le nom commence par celui de la partie traitée. Exemple : Si le patron possède une div nommée 'Partie1' dans laquelle le contrôleur est appelé et que les Divs 'Partie1a' et 'Partie1b' sont décrites dans la configuration, elles seront déclarées dans 'Partie1' et leur contenu y sera inséré.

2.5.3. Layout

Un Layout est l’association d’un Patron avec des déclarations de Divs. On peut définir plusieurs Layouts, mais un seul est utilisé à la fois.

Les Layouts sont définis dans le tableau associatif $CONFIG['Controles']['Layouts'][]

2.6. Cinématique du dialogue

Afin de garantir les meilleures performances au site, les échanges avec le serveur sont réduits au minimum en termes de nombres et de volumes :

  • Les différents fichiers Javascripts (liés aux modules, patron…) sont regroupés avant envoi et stockés en cache par le navigateur (*),
  • De même pour les feuilles de style CSS (*),
  • Le rechargement complet de la page est réalisé le moins souvent possible. Dans la majorité des cas (à la discrétion du développeur), seule la vue modifiée est réaffichée.

Pour cette dernière fonctionnalité, des fonctions Javascript spécifiques au framework implémentent la technique Ajax (Asynchronous Javascript and XML) selon une modalité non obstrusive (les liens continuent de fonctionner sans Javascript, mais rechargent la page complète).

(*) : Le rafraichissement des CSS et JS par le navigateur sera forcé par le changement du numéro de version du site sur le serveur.

2.7. Evenements

(Cette fonctionnalité reste en projet. Rien n’a encore été développé.)

Lorsqu’une vue est rafraichie, sans que la page entière le soit, il peut arriver que le contenu de vues non rafraichies ne soit plus à jour (typiquement si une Maj a été effectuée). Pour demander le rafraichissement de ces vues après la réponse du serveur, une gestion évènementielle est mise en place entre le serveur et le navigateur de l’utilisateur.


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