Gestion des erreurs 2 : plus poussé ^^

Mammouth du PHP | 983 Messages

18 juin 2006, 14:20

Le fait de découper ne rajoute pas de la complexité au code, au contraire. Il permet de découper l'algorithme de base assez complexe, en fonction ayant un but unique, donc simple à comprendre. Il est facile de comprendre un code qui fait :
if(ajout_possible())
   if(contraintes_respectées())
       upload()
De plus, imagines le jour où tu souhaites ajouter un type d'image par exemple. Tu ne touches pas à ton algorithme général, juste à la fonction qui correspond à la vérification du type. D'une, tu limites les effets de bords de la modification, deux tu n'as juste qu'à modifier un bout de code très facile à comprendre.
Après, c'est aussi une question de goût. Sur un projet où tu es le seul à developper, c'est sûr que cela a moins d'importance, mais sur un projet où plusieurs pesonnes participent, et surtout maintiennent, cela prend tout son intérêt.

Pour revenir à ta question initiale, voici comment je fais pour gérer les erreurs utilisateurs. Note que je travaille exclusivement en objet, mais que c'est facilement convertible en proédurale.

J'utilise :
  • - un objet encapsulant la session PHP
    - un objet Message correspondant au message d'erreur / informations
    - un objet Vue qui se charge de gérer la sortie de l'application
    - je passe les objets Controller,Router...
Dans ma session, j'ai un attribut qui correspond au message destiné à l'utilisateur (qui est évidemment du type Message). Lorsqu'une méthode génère une erreur fonctionnelle, ou un message d'informations à l'utilisateur (opération réussie, prise en compte d'une action...), je le mets en session et je redirige / stop l'exécution. La vue regarde automatiquement si un message est en session. Elle l'affiche puis l'efface de la session.

Je sais pas si c'est très clair, n'hésites pas si ce n'est pas le cas.

Sertt
Invité n'ayant pas de compte PHPfrance

19 juin 2006, 23:51

Si j'ai bien compris, tu n'utilises pas de try pour tes erreurs fonctionnelles puisqu'elles sont "attrapées" par ton objet Vue.

Est-ce que tu pourrais néanmoins éclaircir ce point-ci :
[quote"Rami"]Lorsqu'une méthode génère une erreur fonctionnelle, ou un message d'informations à l'utilisateur (opération réussie, prise en compte d'une action...), je le mets en session et je redirige / stop l'exécution. La vue regarde automatiquement si un message est en session. Elle l'affiche puis l'efface de la session. [/quote]

Donc, si je résume, une erreur est casée dans l'object session, mais j'ai du mal à saisir la suite de la procédure.

D'avance merci,

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

20 juin 2006, 08:48

imagine que t'as 2 traitements parallèles totalement indépendants quant à la séquence des tâches nécessaires pour atteindre un objectif mais qui se partage un ensemble de données. La question est comment rendre possible ce partage? La réponse est de localiser les données à partager dans un support partageable qui peut être : une variable globale voir super-globale, un fichier, une base de données ect...

L'exemple de Rami en est un :
Ce qu'il appelle Vue est un traitement qui ne fait qu'afficher une donnée (Message) qui se trouve dans la variable super-globale $_SESSION qui est la session. Peu importe la valeur de cette variable, la Vue l'affiche toujours.
D'autres parts, plusieurs traitements indépendants peuvent agir sur le contenu de la variable partagée (Message)
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 983 Messages

20 juin 2006, 13:23

Tout à fait, je n'aurais pas dit mieux ;)