Dofus-Book
Bonjour visiteur mystérieux ! | Inscription | Connexion | Oubli mot de passe



Posté : 23 mars 2011, 23:41 Message : Si c'est trop DRY... bah prend un verre d'eau !

[Admin DB]
Douce-Flamme
Niveau DB : 22
Messages : 824
Inscrit le 08-03-2009
Strasbourg, France
(Note: pour jira qui a sa boîte de réception pleine >< ... si ça en intéresse d'autres bonne lecture, sinon passez votre chemin )

Alors voilà comment j'ai essayé d'implémenter la méthode DRY (Don't repeat yourself). Déjà il n'y a rien de carré, je ne suis pas webmaster à la base donc j'ai juste tenté d'appliquer du bon sens, pour éviter un maximum de répéter le code.

1. Formulaire d'ajout / d'édition
J'ai fait en sorte de ne jamais dupliquer le code de mes formulaires d'ajout / d'édition car la plupart du temps ce sont quasi les mêmes à quelques variables près. Du coup c'est le même formulaire qui est appelé pour modifier et pour créer un objet (ex: une guilde, un message, etc...). Idem pour coder l'action correspondante dans mon modèle: le même code gère la méthode save() pour enregistrer en base de données un nouveau objet et un objet que l'on modifie.

2. Création de mini templates pour afficher les objets POO
Pour les objets POO que j'affiche souvent (ex: un item du jeu, un message du forum ou de la messagerie), j'ai codé des mini templates en html que j'inclus pour afficher l'objet. Ça m'évite de me répéter et c'est ainsi très facile de réutiliser ce mini template (ex: le mini template afficherItem est appelé quand on liste les items d'une catégorie, sur la page équiper quand on affiche un item, sur la page CaC pour afficher l'arme, à la Forge etc...). Sous Symfony par ex, on appelle ça un "Partial".

3. Création des templates pour gérer les résultats d'un action
Le site étant découpé en modules, eux-mêmes découpés en actions (ajouter, voir, supprimer, modifier, etc), j'écrivais souvent le même code pour afficher le résultat d'une action (ex: "Erreur: item introuvable" ou "Equipement sauvegardé correctement"). Du coup dans mon controleur, je teste toutes les erreurs possibles pour chaque action:
  • Si je n'ai pas d'erreur, et que mon action affiche un formulaire, j'affiche la page correspondante à mon action avec son formulaire (supprimer.php, ajouter.php, etc).
  • Si je n'ai pas d'erreur et que mon formulaire a été posté, j'appelle la méthode adéquate de mon modèle depuis mon controleur (ex: $managerObjet->save($objet), $managerObjet->delete($objet)) puis j'affiche toujours la même page : ok.php.
  • Si j'ai une erreur j'affiche toujours la même page : erreur.php.
Voilà, encore une fois rien d'extraordinaire, juste du bon sens qui m'a permis d'épurer mon code et de gagner en lisibilité =)
 
  Edité par Douce-Flamme
Le 24/03/2011 à 01:43

Posté : 24 mars 2011, 08:56 Message : Si c'est trop DRY... bah prend un verre d'eau !

[Modo]
Jira
Niveau DB : 19
Messages : 689
Inscrit le 14-06-2010
Nancy, France
Note pour douce : Ta messagerie est pleine à 90% (27 / 30 messages autorisés au maximum) donc c'est une mauvaise excuse :D

Ok merci pour cette petite explication :) J'étais parti dans le même sens ça me rassure ^^'
 
  Edité par jira
Le 24/03/2011 à 08:59

Posté : 25 mars 2011, 19:28 Message : Si c'est trop DRY... bah prend un verre d'eau !

[Forgeron Maître]
Rafoulle
Niveau DB : 9
Messages : 142
Inscrit le 29-09-2010
J'ai a peu près compris le tous mais ma curiosité me démange : Pour ne pas répéter le code? je suppose que c'est juste ( si j'ai bien compris) pour que sa reste clair et pour se retrouver plus facilement c'est sa?
 

Posté : 27 mars 2011, 11:01 Message : Si c'est trop DRY... bah prend un verre d'eau !

[Admin DB]
Douce-Flamme
Niveau DB : 22
Messages : 824
Inscrit le 08-03-2009
Strasbourg, France
Parce que c'est plus propre, optimisé et plus facile a faire évoluer aussi =)
 

Posté : 03 avril 2011, 18:52 Message : Si c'est trop DRY... bah prend un verre d'eau !

Sakurades
Niveau DB : 2
Messages : 2
Inscrit le 23-12-2010
France
Je ne sais pas si ça existe pour du PHP et si tu en utilises déjà, mais il y a des "outils" de reporting pour suivre la qualité du code :
- rapport sur la duplication de code
- rapport sur la couverture des tests unitaires
- rapport sur la détection de bug (par exemple, une ouverture de fichier sans sa fermeture, un risque de boucle infinie)
- rapport sur le nb de ligne par "classes" et le nb de ligne des méthodes (fonction)
- rapport sur l'utilisation des variables et import (une variable déclarée non utilisée).

En programmation Java, on utilise souvent (en mode opensource/gratuit) :
- Eclipse (IDE pour programmer)
- Maven 2 (pour compiler, exécuter, lancer des tests unitaires, etc.)
- Sonar (pour le reporting)
- et plein de plugin pour les rapports de qualité (checkstyle, pmd, find bugs; cobertura, etc.)

Voilà, juste des idées, pour trouver les équivalents en PHP.
 

Posté : 04 avril 2011, 09:25 Message : Si c'est trop DRY... bah prend un verre d'eau !

[Modo]
Jira
Niveau DB : 19
Messages : 689
Inscrit le 14-06-2010
Nancy, France
C'est ce que j'utilise au boulot à un détail près, on utilise hudson pour l'intégration continue
 



 
 
    Qui est en ligne ?
Douce-Flamme en Reggae Woman :) Nos membres ont posté un total de 10944 messages
Nous avons 68421 membres enregistrés
L'utilisateur enregistré le plus récent est kiki76
Il y a en tout 18 membres en ligne
Utilisateurs enregistrés : teamolla ChuklaGrosse thibault72610 Deavlebawss hackisntgood antho-p Ravager666 metanira Duramax Victox davidantonio007 moritaka icekissbh10 Eca-sag tribal-air rodolpheleboss kiox Jesuisoual
Moteurs de recherche :
Membres fêtant leur anniversaire aujourd'hui : Danatothor Shoukix Chevalier-mortel Weakneex Defenceur Darkangel01 Kiypoo Astari Batminsk Chouchen Riku_ndeath
Membres fêtant leur anniversaire dans les 7 prochains jours: India (20/05) Irwine (20/05) ThibIscuit (20/05) Douce-Nuit (20/05) breizh-tempete (20/05) Attarian943 (20/05) Kidorfa (20/05) Ewi-coeur (20/05) Alphorak (20/05) MrGarown (21/05) Night-tall (21/05) Kami3105 (21/05) Noobyx (21/05) Yellia (21/05) Nesta-Reve (21/05) Garown (21/05) alexprida (21/05) flashjeje84 (21/05) Maitre-Pate (21/05) Kan3 (22/05) Royale-Deimon (22/05) Vozzy (22/05) Llamathilde (22/05) Manausa (22/05) jolicloclico (22/05) Alineo-I (22/05) WaskaAya (22/05) Slymp (23/05) Needy99 (23/05) Clementcle08000 (23/05) Darkmaud (23/05) golivier (23/05) After-eight (24/05) Ciel-obscur (24/05) Yazmaa (24/05) Shamanofnight (24/05) Doc-all (24/05) Warden07 (24/05) Arcade-new (25/05) Oo-looping (25/05) Marion (25/05) flo89 (25/05) shinzao (25/05) Night-day (25/05) Mardios (25/05) Pilou76200 (25/05) Makobu (25/05) Indo57 (25/05) Nachy (25/05) Hexplosive. (25/05) Stayley (25/05) Trafalgar-law (25/05) amicius (25/05) matraptor76 (26/05) Shinukay (26/05) Sadou-noob (26/05) dark-carnaval (26/05) Miitsu (26/05) Team-Gio (26/05) Urluberlu (26/05) Gueckoz66 (26/05) Deveina (26/05) pouni69 (26/05)
 


 

 Nous suivre sur Twitter Partager ce site sur Twitter  21 membres connectés  |   Organix Cmoieymeric yanik--lessard tribal-air maxrifa Winder Blanka trazom Guyonjohnny4352 Boutchaa andcamilo01 Jesuisoual metanira Weltounet Guiz ChuklaGrosse rodolpheleboss teamolla kiox antho-p moritaka

Dofus-Book © 2009 - 2011
Certaines images sont Copyright © Ankama Studio (Crédits : Ankama Games)
Certains icônes sont Copyright © Silk icon et Copyright © Yusuke Kamiyamane
Conditions d'utilisation   |  Signaler un bug   |  Page générée en 0.23101 secondes   |  Requêtes exécutées : 12