Accueil > Blog-notes > De l’intérêt de SPIP comme framework

De l’intérêt de SPIP comme framework

jeudi 23 octobre 2008

SPIP comme framework"> Voir l'article original

On le sait, une des particularités de SPIP en tant qu’outil de publication consiste en son compilateur de squelettes et de boucles.

Le langage de Boucles de SPIP a été développé au départ dans le but de faciliter l’écriture de gabarits pour les webmestre autodidactes.
En masquant la compléxité de SQL et de la structure de la base de données sous jacente derrière des instructions simples à lire et à comprendre, il facilite l’apprentissage et la modification des gabarits.

Les BOUCLES : une couche d’abstraction de SQL

Mais ce langage de boucle se trouve aussi être un redoutable outil dans le cadre de développement d’application Web.

D’un point de vue développeurs, on peut considérer qu’elles consitituent une couche d’abstraction SQL avec ses avantages :

  • indépendance vis à vis du moteur de requête SQL à partir de SPIP 2.0 (qui supporte nativement mySQL, PostrGreSQL et sQLite)
  • optimisation systématique des requêtes ; même si un bon développeur est suceptible d’optimiser manuellement ses requêtes plus efficacement, c’est toujours bon à prendre
  • cache des requêtes SQL - plus exactement ce ne sont pas les requetes SQL qui sont mises en cache, mais les pages html. Toutefois cette mise en cache permet des gains de performances significatifs, et pour certaines boucles répétitives, il est possible d’implémenter la boucle dans une inclusion dédiée, qui cachera donc le produit de la boucle
  • jointures automatisées, en particulier lorsqu’on fait l’effort de normaliser son schema de BDD avec un nommage identique des champs utilisés en jointure entre tables.

extensible...

Comme toute couche d’abstraction, elle peut être enrichie à loisir en fonction des particularités de l’application développée :

  • en définissant ses propres critères de selection
  • en définissant ses balises

Mais un des points forts qui m’a inspiré cet article, est la boucle elle même ses propriétés sous-jacentes.

Qui a pratiqué un peu le développement avec SPIP sait que toute table SQL toto est présente dans la base est directement utilisable en boucle dans un squelette, sans plus de déclaration

Ceci est rendu possible car SPIP implémente une définition générique par défaut des boucles, qui est utilisé, comme ici pour la boucle (toto) lorsque aucune définition personalisée n’a été réalisée.

et un ensemble de règles implicites...

Mais cette boucle peut aussi être vue comme un ensemble de règles implicites (par défaut vide) à appliquer à toutes les requêtes sur la table toto.

Prenons un exemple

Si demain je dois ajouter un champ statut à ma table toto qui me servira à marquer les enregistrement supprimés (car en fait, je ne veux pas vraiment les supprimer), je vais vouloir naturellement que ce champ statut soit pris en compte dans toutes les requêtes de mon application.

Avec SPIP cela peut être réalisé très simplement :

Avec ces quelques lignes, on ajoute la condition AND statut<>'poubelle' à toutes les requetes sur la table toto générées par les boucles (toto) (sauf si la boucle contient déjà explicitement une condition sur statut...)

qui améliorent la maintenabilité !

Dans une application web classique, où les requetes sql sont écrites explicitement, chacune de ces requête aurait dut être reprise à la main et être corrigé en lui ajoutant cette condition.

Appréciez le gain de temps et l’amélioration de la maintenabilité de votre application, en prenant en compte tant le temps économisé que les sources potentielles de regression évitées (chaque modification manuelle d’une requête étant potentiellement un nouveau bug ...)

SPIP comme framework"> Commenter l'article original