Martius Web : toolbox pour programmeurs et webmasters
AccueilRéalisationsArticlesTutoriauxBlogForumContact
Martius Web vous propose ses services à des prix très compétitifs, contactez-nous ! (Missions de tout type sur Troyes ou Dijon, sur place ou télétravail)

Les articles

// Quelles solutions pour gérer la vue avec PHP ?

Quelles solutions pour gérer la vue avec PHP ?

Par : Martius
Sujet : PHP
Lectures : 1987
En bref : Un regard sur les solutions les plus courantes pour maitriser la séparation entre la logique métier et la vue dans les applications PHP.


Je vais essayer de comparer trois méthodes pour gérer la vue avec PHP. Chacune apporte ses avantages et ses inconvénients. Pour l'instant, je ne sais toujours pas vraiment laquelle je préfère. Il vous appartient donc d'étudier par vous même les solutions exposées.

// Utiliser directement PHP

On peut tout simplement faire un modèle de page qui sera analysée par php après que la couche métier ai été exécutée. Comme ceci :

 1 <?php foreach($blog->billets as $billet): ?>
 2 <div class="billet" id="b<?php echo $billet->id; ?>">
 3   <h1><?php echo $billet->titre; ?></h1>
 4   <div class="contenu"><?php echo $billet->contenu; ?></div>
 5 </div>
 6 <?php endforeach; ?>

Cette méthode est assez propre, la vue est bien séparée de la logique métier de notre application, et les données sont accessibles par des objets simples. Cette solution possède un fort avantage quand à la vitesse de traitement, car le modèle est directement analysé par le moteur de PHP.

Cependant, elle apporte aussi des risques de mauvais usage, comme par exemple dans le cas d'un travail en groupe. Par exemple, l'intégrateur XHTML/CSS pourra employer php à tord, sans respecter l'organisation de l'application. Prenons un exemple (un peu extrème) :

 1 <?php
 2 include('mysql.inc.php');
 3 foreach($blog->billets as $billet): ?>
 4 <div class="billet" id="b<?php echo $billet->id; ?>">
 5   <h1><?php echo $billet->titre; ?></h1>
 6   <div class="auteur"><?php $res = mysql_query('SELECT * FROM
     billets WHERE bid='.$billet->id);
 7   while($r = mysql_fecth_array($res)) { echo $r['auteur']; }
     ?></div>
 8   <div class="contenu"><?php echo $billet->contenu; ?></div>
 9 </div>
10 <?php endforeach; ?>

Ici, notre intégrateur va tout simplement nier la totalité de l'architecture du programme conçue par les développeurs, et mélanger traitement de données avec leur affichage. Ce manque de restrictions peut devenir un problème.

// Les moteurs de templates

Les moteurs templates fonctionnent sur le même principe que précedement, mais cette fois, on utilise un autre langage plus approprié et efficace. Le template sera ainsi analysé par le moteur développé en php (souvent sous forme de classe). Notre ressemblera alors à :

 1 {Section "billets"}
 2 <div class="billet" id="b{billets.id}">
 3   <h1>{billets.titre}</h1>
 4   <div class="contenu">{billets.contenu}</div>
 5 </div>
 6 {/Section}

Cette syntaxe est plus simple que la précédente, et évite les débordements. De plus il existe déjà de nombreux moteurs templates que vous pouvez intégrer à votre application PHP. Cependant, bien que la syntaxe peut être très puissante, l'analyse du template coutera plus cher en ressources pour le serveur de traitement, mais beaucoup de moteurs de templates intègrent un système de cache pour réduire les temps de calcul.

// XSL Transform (XSLT)

Cette dernière solution est peut-être la plus passionnante, mais pas la plus évidente à mettre en place. Il s'agit d'utiliser le langage XSLT.

En attachant à un fichier XML une feuille de style XSLT, on peut le transformer en un autre fichier, par exemple XHTML, mais aussi tout dérivé de XML, ou bien même un fichier PDF. Cette solution à l'atout d'être une technologie pleine d'avenir et standardisée. De plus, les navigateurs récents sont capable d'interpréter XSLT par eux même, XSLT permet donc d'éliminer une charge supplémentaire au serveur. PHP ne générerais donc qu'un document XML et lui associerait la feuille XSLT en fonction du format de sortie désiré.

Cependant, PHP devra prendre le relais pour les utilisateurs possédant des navigateurs plus anciens, il faut donc prévoir un outil de traitement XSLT par PHP (il existe des librairies standards pour PHP 5 très efficaces). Mais le traitement XSLT coute cher en ressource pour le serveur si le navigateur client ne peut le faire pour lui. Enfin, la syntaxe XSLT est très puissante et très complète, mais sa prise en main coute l'apprentissage d'un nouveau langage, et le maitriser prend un certain temps.


Liens en relation avec cet article :

phpMyVisites


© 2004 Martius Web | Some rights reserved | A propos | Plan du site