31
Bonnes pratiques de développement Réunion technique 13/01/09

Reunion Technique PMSIpilot - Janvier 2010

Embed Size (px)

DESCRIPTION

Bonnes pratiques de développement

Citation preview

Page 1: Reunion Technique PMSIpilot - Janvier 2010

Bonnes pratiques de

développement

Réunion technique 13/01/09

Page 2: Reunion Technique PMSIpilot - Janvier 2010

01/15/102

Réunion technique

Plan

Recommandations de codage – PHPNe pas modifier SymfonyGestion des actionsRouting SFDépendancesRefactoringFichiersGestion des pluginsJavascript - CSSDébogage (+ Profiling)Etapes d'un développement

Page 3: Reunion Technique PMSIpilot - Janvier 2010

01/15/103

Réunion technique

Best pratices (once again !?)

Sont mouvantesSont empiriques (= subjectives)Doivent nous servir et nous rassurer

Page 4: Reunion Technique PMSIpilot - Janvier 2010

01/15/104

Réunion technique

Recommandations de codage - PHP

Standard de codage PMSIpilotIndenter avec 2 espacesEcrire les accolades sur des nouvelles lignes

Respecter les règles de nommage SFPour une classe, le nom de fichier se termine par .class.phpPour une task, le nom de fichier se termine par Task.class.php

Si possible, ne pas fermer les tags PHP – Zend Programmer's Reference Guide :

Ne pas l'inclure permet de se prémunir des problèmes liés à l'injection accidentelle d'espaces blancs dans la sortie.

Page 5: Reunion Technique PMSIpilot - Janvier 2010

01/15/105

Réunion technique

Recommandations de codage - PHP

Standard de codage PMSIpilotPréfixer les noms des classes maison par « pmsipilot »Logguer les erreurs Log::add()Déclencher des pmsipilotException

plutôt que des sfException

Utiliser les pre et post Execute sur les composantsNe pas utiliser l'autoformatting de votre éditeurPlacer des @FIXME et @TODO (mode goret only) Etc

cf. http://trac.symfony-project.org/wiki/HowToContributeToSymfony#CodingStandards

Page 6: Reunion Technique PMSIpilot - Janvier 2010

01/15/106

Réunion technique

Recommandations de codage - PHP

Une variable doit être obligatoirement initialiséeMême si PHP sette les variables non initialisées à null

Page 7: Reunion Technique PMSIpilot - Janvier 2010

01/15/107

Réunion technique

Recommandations de codage - PHP

Préférer sprintf à l'opérateur '.' pour concaténerUtiliser la méthode sprintf

Plus lisiblePermet le formatage (remplisseur, type, etc)N'émet pas d'erreur en cas de variable inexistante

Au besoin, se servir de la syntaxe Heredoc

Page 8: Reunion Technique PMSIpilot - Janvier 2010

01/15/108

Réunion technique

Recommandations de codage - PHP

Rendre ses méthodes paramétrablesPour éviter d'avoir des paramètres facultatifs nuisibles lors

des appels

Mettre, en dernier paramètre de fonction, un tableau paramétrable à souhait

Page 9: Reunion Technique PMSIpilot - Janvier 2010

01/15/109

Réunion technique

Ne pas modifier Symfony

Même si la modification apporte un gain !Buts :

obtenir impérativement le comportement attendu de SFupgrader SF sans problèmes

Modifier le core SF

Etendre SFsurchargefactories.yml...

Voire ponctuellement Forker SF

Page 10: Reunion Technique PMSIpilot - Janvier 2010

01/15/1010

Réunion technique

Ne pas modifier Symfony

Etendre SF : exemple de pmsipilotUserMettre dans pmsipilotUser ce qui est commun à toutes les

applis

Coder dans myUser ce qui est spécifique à une application

Page 11: Reunion Technique PMSIpilot - Janvier 2010

01/15/1011

Réunion technique

Gestion des actions

En début d'action, vérifier systématiquement les paramètres obligatoires

Page 12: Reunion Technique PMSIpilot - Janvier 2010

01/15/1012

Réunion technique

Gestion des actions

Faites des redirect au lieu de forwardPour éviter de casser la navigationPour éviter le re-post du formulaire si rechargement de la

page

http://www.symfony-project.org/forms/1_2/fr/02-Form-Validation

Page 13: Reunion Technique PMSIpilot - Janvier 2010

01/15/1013

Réunion technique

(Gestion des actions)

Casser le MVC

Page 14: Reunion Technique PMSIpilot - Janvier 2010

01/15/1014

Réunion technique

Routing SF

Nous utilisons peu les routes Modules très rigides : à cause de références permanentes

aux noms des modules et des actionsURLs peu sexy

Page 15: Reunion Technique PMSIpilot - Janvier 2010

01/15/1015

Réunion technique

Dépendances

Doivent nous obséder carspécialisation forte du codeunit testing compromis

Au minimum, les référencerAu mieux, les éviter ou les casser

Dans l'idéal, les gérerinjection de dépendances en PHP

http://fabien.potencier.org/article/15/symfony-service-container-using-xml-or-yaml-to-describe-services

Page 16: Reunion Technique PMSIpilot - Janvier 2010

01/15/1016

Réunion technique

Dépendances - exemple

2010 : 1 appel à sfContext::getInstance() = 2 points boulet ?

utiliser pmsipilotContext en dehors d'un contexte SF devient pénible

utiliser pmsipilotContext dans différents contextes SF devient hasardeux

Page 17: Reunion Technique PMSIpilot - Janvier 2010

01/15/1017

Réunion technique

Dépendances - exemple

Si inutile, éviter de passer des objets à un constructeur ou à un setter

Page 18: Reunion Technique PMSIpilot - Janvier 2010

01/15/1018

Réunion technique

Refactoring

Eviter les classes qui ne contiennent que des méthodes statiques et fourre tout

Eviter les mélanges de conceptS'appuyer sur la POO

(OMG)

Page 19: Reunion Technique PMSIpilot - Janvier 2010

01/15/1019

Réunion technique

Refactoring

Ranger les librairies aux bons endroitsplugins pmsipilotApp*Plugin

Conserver la généricité du codeCentraliser les modules, les surchargerDifférencier les traitements bas niveau relevant du core

Page 20: Reunion Technique PMSIpilot - Janvier 2010

01/15/1020

Réunion technique

Refactoring

Yes we canJobs d'importGestion utilisateurComposants PMSIpilot dans VisiopôleCriteriaGestion des menusPage de détails des séjoursMessage d'accueilGammes, licences

RAFpmsipilot*Actionpmsipilot*UserTranches d'agesIndicateur de synthèse

Page 21: Reunion Technique PMSIpilot - Janvier 2010

01/15/1021

Réunion technique

Fichiers

Tout fichier créé doit être suppriméEcrivez dans /var/tmpUtiliser pmsipilotUtils::myTempnam pour nommer les

fichiers (cf. http://fr.php.net/tempnam)

Eviter les accès au disqueUn sfFinder dans le bon répertoireVaut mieuxQu'un sfFinder trop large qui resserre avec un « prune »

Page 22: Reunion Technique PMSIpilot - Janvier 2010

01/15/1022

Réunion technique

Fichiers

Référencer le chemin vers un fichier à partir du répertoire courant

Pour ne pas harcoder de pathPour éviter par exemple des soucis lors de déplacement de

code

Ignorer les lignes vides

Page 23: Reunion Technique PMSIpilot - Janvier 2010

01/15/1023

Réunion technique

Gestion des plugins

N'envisager de nouveaux plugins que s'ils ont des schema.yml

Pour ne pas polluerPossibilité de maintenir un schéma DBDesigner par plugin

Etre awareDe la version du pluginDu placement et nommage des patchsDes dépendances avec d'autres pluginsDu référencement des plugins (config/plugins.txt)...

Page 24: Reunion Technique PMSIpilot - Janvier 2010

01/15/1024

Réunion technique

Javascript - CSS

Tester en dev mais surtout tester en prodEn prod, compression JS (pmsipilotCombineFilter)

Tester sur FF mais surtout tester sur IEIE foire sur des utilisations particulières de fonctions

jQueryjQuery.map()Statut des cases à cocheretc

Page 25: Reunion Technique PMSIpilot - Janvier 2010

01/15/1025

Réunion technique

Javascript - CSS

Eclater les inclusions de js/css par action et par composant

Plutôt que tout mettre dans le view.yml de l'applicationUtiliser la surcharge YAML (javascripts[-*] LOL)

Coder des objets javascriptProblématique des dépendances valable en JS

Page 26: Reunion Technique PMSIpilot - Janvier 2010

01/15/1026

Réunion technique

Javascript - CSS

Sprites

Page 27: Reunion Technique PMSIpilot - Janvier 2010

01/15/1027

Réunion technique

Débogage ( + Profiling)

Un traitement pédale ?vous incluez des url_for en boucle LOL ?votre task SF se retape un autoloading pour le fun LOL ?le logger Propel éclate votre RAM LOL ?

Suivre la web debug toolbarAvant d'optimiser, MESURER

Eventuellement, se mettre en prodTout ce qui arrive en dev n'arrive pas forcément en prod (et vice versa)

"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil" Donald Knuth

Page 28: Reunion Technique PMSIpilot - Janvier 2010

01/15/1028

Réunion technique

Débogage ( + Profiling)

Xdebug + kcachegrindXhprof

Installationhttp://mirror.facebook.net/facebook/xhprof/http://techportal.ibuildings.com/2009/12/01/profiling-with-xhprof/

Intégration

Cf démo !

Page 29: Reunion Technique PMSIpilot - Janvier 2010

01/15/1029

Réunion technique

Etapes d'un développement

1. faire un plan2. écrire les tests possibles3. penser sécurité4. penser performance5. penser simplicité et donc réutilisation6. coder tout, ne rien tester7. (optimiser)8. tester tout, ne rien coder9. coder10. tester11. coder12. tester IE 6, IE 7, IE 8, FF

Page 30: Reunion Technique PMSIpilot - Janvier 2010

01/15/1030

Réunion technique

Conclusion

Page 31: Reunion Technique PMSIpilot - Janvier 2010

01/15/1031

Réunion technique

Merci de votre attention

Questions