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


Recommandations de codage – PHP
Ne pas modifier Symfony
Gestion des actions
Routing SF
Dépendances
Refactoring
Fich...
Best pratices (once again !?)


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




  ...
Recommandations de codage - PHP


Standard de codage PMSIpilot
 Indenter avec 2 espaces
 Ecrire les accolades sur des nouv...
Recommandations de codage - PHP


Standard de codage PMSIpilot
 Préfixer les noms des classes maison par « pmsipilot »
 Lo...
Recommandations de codage - PHP


Une variable doit être obligatoirement initialisée
 Même si PHP sette les variables non ...
Recommandations de codage - PHP


Préférer sprintf à l'opérateur '.' pour concaténer
 Utiliser la méthode sprintf
    Plus...
Recommandations de codage - PHP


Rendre ses méthodes paramétrables
 Pour éviter d'avoir des paramètres facultatifs nuisib...
Ne pas modifier Symfony


Même si la modification apporte un gain !
Buts :
 obtenir impérativement le comportement attendu...
Ne pas modifier Symfony


Etendre SF : exemple de pmsipilotUser
 Mettre dans pmsipilotUser ce qui est commun à toutes les
...
Gestion des actions


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




                     ...
Gestion des actions


Faites des redirect au lieu de forward
 Pour éviter de casser la navigation
 Pour éviter le re-post ...
(Gestion des actions)


Casser le MVC




                          Réunion technique
                                    ...
Routing SF


Nous utilisons peu les routes
 Modules très rigides : à cause de références permanentes
   aux noms des modul...
Dépendances


Doivent nous obséder car
 spécialisation forte du code
 unit testing compromis


Au minimum, les référencer
...
Dépendances - exemple


2010 :   1 appel à sfContext::getInstance() = 2 points boulet ?
 utiliser pmsipilotContext en deho...
Dépendances - exemple



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




                 ...
Refactoring


Eviter les classes qui ne contiennent que des
  méthodes statiques et fourre tout
 Eviter les mélanges de co...
Refactoring


Ranger les librairies aux bons endroits
 plugins pmsipilotApp*Plugin
Conserver la généricité du code
 Centra...
Refactoring


Yes we can
 Jobs d'import
 Gestion utilisateur
 Composants PMSIpilot dans Visiopôle
 Criteria
 Gestion des m...
Fichiers


Tout fichier créé doit être supprimé
 Ecrivez dans /var/tmp
 Utiliser pmsipilotUtils::myTempnam pour nommer les...
Fichiers


Référencer le chemin vers un fichier à partir du
  répertoire courant
 Pour ne pas harcoder de path
 Pour évite...
Gestion des plugins


N'envisager de nouveaux plugins que s'ils ont des
  schema.yml
 Pour ne pas polluer
 Possibilité de ...
Javascript - CSS


Tester en dev mais surtout tester en prod
 En prod, compression JS (pmsipilotCombineFilter)
Tester sur ...
Javascript - CSS


Eclater les inclusions de js/css par action et par
  composant
 Plutôt que tout mettre dans le view.yml...
Javascript - CSS


Sprites




                      Réunion technique
                                01/15/10
          ...
Débogage ( + Profiling)



Un traitement pédale ?
 vous incluez des url_for en boucle LOL ?
 votre task SF se retape un au...
Débogage ( + Profiling)


Xdebug + kcachegrind
Xhprof
 Installation
    http://mirror.facebook.net/facebook/xhprof/
    ht...
Etapes d'un développement


1. faire un plan
2. écrire les tests possibles
3. penser sécurité
4. penser performance
5. pen...
Conclusion




             Réunion technique
                       01/15/10
                             30
Merci de votre attention


Questions




                             Réunion technique
                                  ...
Prochain SlideShare
Chargement dans…5
×

Reunion Technique PMSIpilot - Janvier 2010

1 645 vues

Publié le

Bonnes pratiques de développement

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 645
Sur SlideShare
0
Issues des intégrations
0
Intégrations
415
Actions
Partages
0
Téléchargements
16
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Reunion Technique PMSIpilot - Janvier 2010

  1. 1. Réunion technique 13/01/09 Bonnes pratiques de développement
  2. 2. Plan Recommandations de codage – PHP Ne pas modifier Symfony Gestion des actions Routing SF Dépendances Refactoring Fichiers Gestion des plugins Javascript - CSS Débogage (+ Profiling) Etapes d'un développement Réunion technique 01/15/10 2
  3. 3. Best pratices (once again !?) Sont mouvantes Sont empiriques (= subjectives) Doivent nous servir et nous rassurer Réunion technique 01/15/10 3
  4. 4. Recommandations de codage - PHP Standard de codage PMSIpilot Indenter avec 2 espaces Ecrire les accolades sur des nouvelles lignes Respecter les règles de nommage SF Pour une classe, le nom de fichier se termine par .class.php Pour 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. Réunion technique 01/15/10 4
  5. 5. Recommandations de codage - PHP Standard de codage PMSIpilot Pré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 composants Ne pas utiliser l'autoformatting de votre éditeur Placer des @FIXME et @TODO (mode goret only) Etc cf. http://trac.symfony- project.org/wiki/HowToContributeToSymfony#CodingStand ards Réunion technique 01/15/10 5
  6. 6. Recommandations de codage - PHP Une variable doit être obligatoirement initialisée Même si PHP sette les variables non initialisées à null Réunion technique 01/15/10 6
  7. 7. Recommandations de codage - PHP Préférer sprintf à l'opérateur '.' pour concaténer Utiliser la méthode sprintf Plus lisible Permet le formatage (remplisseur, type, etc) N'émet pas d'erreur en cas de variable inexistante Au besoin, se servir de la syntaxe Heredoc Réunion technique 01/15/10 7
  8. 8. Recommandations de codage - PHP Rendre ses méthodes paramétrables Pour éviter d'avoir des paramètres facultatifs nuisibles lors des appels Mettre, en dernier paramètre de fonction, un tableau paramétrable à souhait Réunion technique 01/15/10 8
  9. 9. Ne pas modifier Symfony Même si la modification apporte un gain ! Buts : obtenir impérativement le comportement attendu de SF upgrader SF sans problèmes Modifier le core SF Etendre SF surcharge factories.yml ... Réunion technique 01/15/10 Voire ponctuellement Forker SF 9
  10. 10. Ne pas modifier Symfony Etendre SF : exemple de pmsipilotUser Mettre dans pmsipilotUser ce qui est commun à toutes les applis Coder dans myUser ce qui est spécifique à une application Réunion technique 01/15/10 10
  11. 11. Gestion des actions En début d'action, vérifier systématiquement les paramètres obligatoires Réunion technique 01/15/10 11
  12. 12. Gestion des actions Faites des redirect au lieu de forward Pour éviter de casser la navigation Pour éviter le re-post du formulaire si rechargement de la page Réunion technique 01/15/10 http://www.symfony-project.org/forms/1_2/fr/02-Form-Validation 12
  13. 13. (Gestion des actions) Casser le MVC Réunion technique 01/15/10 13
  14. 14. Routing SF Nous utilisons peu les routes Modules très rigides : à cause de références permanentes aux noms des modules et des actions URLs peu sexy Réunion technique 01/15/10 14
  15. 15. Dépendances Doivent nous obséder car spécialisation forte du code unit testing compromis Au minimum, les référencer Au mieux, les éviter ou les casser Dans l'idéal, les gérer injection de dépendances en PHP http://fabien.potencier.org/article/15/symfony-service-container Réunion technique 01/15/10 15
  16. 16. 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 Réunion technique 01/15/10 16
  17. 17. Dépendances - exemple Si inutile, éviter de passer des objets à un constructeur ou à un setter Réunion technique 01/15/10 17
  18. 18. Refactoring Eviter les classes qui ne contiennent que des méthodes statiques et fourre tout Eviter les mélanges de concept S'appuyer sur la POO (OMG) Réunion technique 01/15/10 18
  19. 19. Refactoring Ranger les librairies aux bons endroits plugins pmsipilotApp*Plugin Conserver la généricité du code Centraliser les modules, les surcharger Différencier les traitements bas niveau relevant du core Réunion technique 01/15/10 19
  20. 20. Refactoring Yes we can Jobs d'import Gestion utilisateur Composants PMSIpilot dans Visiopôle Criteria Gestion des menus Page de détails des séjours Message d'accueil Gammes, licences RAF pmsipilot*Action pmsipilot*User Tranches d'ages Réunion technique 01/15/10 Indicateur de synthèse 20
  21. 21. Fichiers Tout fichier créé doit être supprimé Ecrivez dans /var/tmp Utiliser pmsipilotUtils::myTempnam pour nommer les fichiers (cf. http://fr.php.net/tempnam) Eviter les accès au disque Un sfFinder dans le bon répertoire Vaut mieux Qu'un sfFinder trop large qui resserre avec un « prune » Réunion technique 01/15/10 21
  22. 22. Fichiers Référencer le chemin vers un fichier à partir du répertoire courant Pour ne pas harcoder de path Pour éviter par exemple des soucis lors de déplacement de code Ignorer les lignes vides Réunion technique 01/15/10 22
  23. 23. Gestion des plugins N'envisager de nouveaux plugins que s'ils ont des schema.yml Pour ne pas polluer Possibilité de maintenir un schéma DBDesigner par plugin Etre aware De la version du plugin Du placement et nommage des patchs Des dépendances avec d'autres plugins Du référencement des plugins (config/plugins.txt) ... Réunion technique 01/15/10 23
  24. 24. Javascript - CSS Tester en dev mais surtout tester en prod En prod, compression JS (pmsipilotCombineFilter) Tester sur FF mais surtout tester sur IE IE foire sur des utilisations particulières de fonctions jQuery jQuery.map() Statut des cases à cocher etc Réunion technique 01/15/10 24
  25. 25. Javascript - CSS Eclater les inclusions de js/css par action et par composant Plutôt que tout mettre dans le view.yml de l'application Utiliser la surcharge YAML (javascripts[-*] LOL) Coder des objets javascript Problématique des dépendances valable en JS Réunion technique 01/15/10 25
  26. 26. Javascript - CSS Sprites Réunion technique 01/15/10 26
  27. 27. 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 toolbar Avant d'optimiser, MESURER Eventuellement, se mettre en prod Tout 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" Réunion technique 01/15/10 Donald Knuth 27
  28. 28. Débogage ( + Profiling) Xdebug + kcachegrind Xhprof Installation http://mirror.facebook.net/facebook/xhprof/ http://techportal.ibuildings.com/2009/12/01/profiling-with-xhprof/ Intégration Cf démo ! Réunion technique 01/15/10 28
  29. 29. Etapes d'un développement 1. faire un plan 2. écrire les tests possibles 3. penser sécurité 4. penser performance 5. penser simplicité et donc réutilisation 6. coder tout, ne rien tester 7. (optimiser) 8. tester tout, ne rien coder 9. coder 10. tester 11. coder Réunion technique 01/15/10 12. tester IE 6, IE 7, IE 8, FF 29
  30. 30. Conclusion Réunion technique 01/15/10 30
  31. 31. Merci de votre attention Questions Réunion technique 01/15/10 31

×