Objectifs

Cette classe isole la construction des liens dans l'application. L'avantage de cette approche apparaît lorsque la nomenclature des liens changes : il suffit de réimplémenter la classe, sans toucher à l'application. On peut aussi décider d'utiliser des URLs classique (avec des paramètres d'URL) ou des URLs réécrites (module mod_rewrite d'Apache).

En revanche, il y a un couplage fort entre cette classe et l'examen des paramètres de l'URL : si le changement introduit une nouvelle nomenclature de paramètres, des changements de formats pour les paramètres existants, il faut revoir cette portion également. D'ou l'intérêt d'isoler également l'examen de ces paramètres.

Enfin, tout changement de l'API existente dans la classe a bien évidemment des répercussion dans toute l'application.

Choix de l'implémentation

Tous les liens de l'applications doivent être construits par la classe. Habituellement, on pourra distinguer 3 parties dans un lien :

La base
C'est le préfixe présent dans tous les liens de l'application. Par exemple http://www.mondomaine.com/monappli/
Le script
A partir de la base, le chemin du script à executer, par exemple module/monscript.php
Les paramètres
La liste des paramètres transmis à la page, par exemple ?userId=toto&action=login.

La base est renseignée dans le constructeur de la classe. Ensuite, pour chaque script, il faut rajouter une fonction de construction des liens, par exemple getMonScript(...). Les paramètres dépendent des fonctionnalités.

On se retrouve ensuite à choisir entre 2 stratégies :

  1. Implémenter la construction de tous les liens dans une seule classe.
  2. Implémenter une classe par script, ou même par action.

Dans le premier cas, le nombre de fonctions se multiplie avec l'augmentation du nombre de liens différents à créer (scripts, fonctions, etc...)

Dans le deuxième cas, c'est le nombre de classes qui se multiplient.

La stratégie la plus probable sera donc une combinaison des deux stratégies, a savoir des constructions de liens regroupés, par exemple, par fonctionnalité, ou par script.

Code source

<?php
/*
(c)2004 David Sporn

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License version 2.1 as published by the Free Software Foundation.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

class LinkerXxx
{
	var myTopPage ;
	
	function LinkerXxx($baseUrl)
	{
		$this->myTopPage = $baseUrl.'index.html' ;
	}
	
	function getTopPage()
	{
		return $this->myTopPage ;
	}
}
?>