Merci à vous, vu que j’ai pas été là de l’aprem, je vais essayer de décrire un peu plus ce à quoi j’avais « pensé », pour voir si je fais fausse route.
Un module à la base, c’est une partie du site : dans mon cas, un forum, des news, une messagerie privée, et une faq (hop ya d’autres trucs mais on s’en tape).
Pour ce genre de choses, on a toujours 3 actions redondantes : ajouter, supprimer, modifier.
J’ai donc pensé à une interface, qui définie ces trois méthodes (en anglais B))
(il peut y avoir une quatrieme, mais j’attends d’avoir un joli dé pour savoir si je la fait ou pas, un truc genre doit())
Autre point commun, chaque « module » possede(ra) son ptit fichier de config et/ou de définitions des erreurs (un xml).
J’ai donc fait une classe abstraite, la fameuse baseModule, qui a pour but de définir et « construire » (au sens initialiser par le biais du constructeur + setters et getters) quelques variables, comme :
- le nom du module,
- le niveau d’acces (genre s’il faut etre loggé ou pas, admin ou pas),
- un niveau d’erreur (en gros si c’est HIGH, on envoie des mails aux admin, et si c’est LOW on se contente d’écrire dans le journal d’évenement),
- une instance d’une classe ModuleException (qui hérite de Exception) qui permet grossomodo de se démerder avec une référence vers l’objet et un code d’erreur
- et je crois que c’est a peu pres tout
C’est en voyant ces points communs entre mes modules (maintenant on sait à peut pres ce que c’est) que j’ai eu l’idée (farfelue) d’en faire une classe elle meme, puis comme c’est une classe qui sert à rien sans héritage, hop abstract.
Une classe et pas une interface « juste » pour le constructeur, getters, setters.
C’est un peu dans la meme logique (voir exactement la meme) que j’ai fait la classe de Messagerie de base (non instanciable car ne sert à rien sans héritage) puisque c’est quasi la meme chose pour un mail que pour un message privé, voir un sms ou un message télépatique.
N’empeche que mon module de messagerie est un module donc doit surcharger BaseModule pour pouvoir etre dréssé comme tout le monde.
Ou alors jme goure et je dois juste utiliser de la composition pour que BaseModule devienne une « information » en tant que membre de toute classe module.
Et comme j’ai pas 3 semaines pour lire un bouquin, et accéssoirement pas de fric en ce moment, je continue de vous embeter avec ça.
En quise de synthese sur mon « archi », le but de tout ça est de pouvoir finallement instancier des modules comme suit :
[code]try
{
$monModule = new Module(<<fichier de config, passé par magie>>);
if(isset($_POST[‹ done ›]))
{
$monModule->Ajouter($_POST);
echo ‹ Action réalisée avec succes. ›;
}
else
$monModule->DisplayForm(); // Voilà pourquoi je parle (plus bas) de l’interfaçage du html, pour savoir où le situer dans quelle classe ou interface.
catch (ModuleException $e)
{
try
{
echo $e;
}
// par convention, si l’on rencontre un probleme dans les exceptions, on lance une exception « basique » pour plus de simplicité.
catch(Exception $ex)
echo $ex;
}
// Des fois que quelque chose ne soit pas capturé
catch (Exception $e)
echo $e;[/code]
En se disant qu’aucune érreur ne peut passer ici, puisque les exceptions relevent tout.
( Je veux pas de remarque sur le bien fondé d’utiliser des exceptions ou pas, en develweb tout ce qui est « sale » en software est trop hype en web )
Enfin la derniere « problématique » c’est peut être de savoir comment « interfacer » (cf article zend ci dessous et l’interface xmlable, moi je pensais à un htmlable, pdfable … ) mon htmleuh…
je m’explique en partant de ce design pattern (bridge (pas d’ancre sur la page)) et de cette histoire de xmlable, je me suis dit que ça pourrait être sympa de faire une page qui soit générée par une classe basé un peu sur ce principe : du xml, ou du html, ou du pdf par exemple. (mais ceci est quand meme une tout autre question, mais par principe je n’ouvre pas d’autre sujet)
Je pense avoir tout mis à plat, j’espere que ça pourra vous aider à m’aider à y voir plus clair B)
Merci d’avoir pris le temps de lire tout ça !