Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ProTips Symfony (mais pas que)

ProTips Symfony (mais pas que)

Présentation pour le sfPot Lyonnais du 2 Octobre 2014 hébergé par Norsys. http://afsy.fr/

Alexandre Balmes

October 02, 2014
Tweet

More Decks by Alexandre Balmes

Other Decks in Programming

Transcript

  1. La Blackroom
    ProTips Symfony

    (mais pas que)

    View Slide

  2. La Blackroom
    2
    Alexandre BALMES
    twitter.com/pockystar
    github.com/pocky
    !
    Project Manager
    Développeur
    Futur indépendant
    Le dev c’est trop ma vie <3
    Au programme
    Système

    Devops sur fond d’industrialisation
    Code

    View Slide

  3. La Blackroom
    3
    • Ce qui suit n’est pas trié par importance ou par criticité
    • Pondérez suivant vos projets (temps/argent)
    • Tout protip est discutable
    Disclaimer

    View Slide

  4. La Blackroom
    Le système

    View Slide

  5. La Blackroom
    5
    • Quel OS et pour qui ?
    • Parlons de case-sensitive
    • Et de ce que vous utilisez pour développer
    Le système

    View Slide

  6. La Blackroom
    6
    • Windows : à éviter (sauf si… Arrêtez de pensez à Azure svp).
    • Linux : Oui mais quel distribution ?
    • OSX : A quel moment ?
    • Envisager la virtualisation ET Docker : http://geoffrey.io/making-docker-
    commands.html par Geoffrey Bachelet (@ubermuda)
    Quel OS et pour qui ?

    View Slide

  7. La Blackroom
    7
    • Attention à OSX !
    • Problèmes collatéraux (Adobe…)
    Parlons de Case-sensitive

    View Slide

  8. La Blackroom
    8
    • Et de GIT
    • # git config --unset-all core.ignorecase && git config --system core.ignorecase false
    Parlons de case-sensitive

    View Slide

  9. La Blackroom
    9
    • Utilisez un IDE.
    Et de ce que vous utilisez pour développer

    View Slide

  10. La Blackroom
    10
    • Un IDE.
    Et de ce que vous utilisez pour développer

    View Slide

  11. La Blackroom
    11
    •Un IDE.
    Et de ce que vous utilisez pour développer

    View Slide

  12. La Blackroom
    UN IDE
    (BORDEL)
    12

    View Slide

  13. La Blackroom
    13
    • Il n’existe pas que Netbeans et Eclipse
    Et de ce que vous utilisez pour développer

    View Slide

  14. La Blackroom
    14
    • PHPStorm est une vraie solution
    • PHPStorm est gratuit pour les étudiants et les porteurs de projets OpenSource
    • PHPStorm (depuis sa version 8) est capable de communiquer avec un interpréteur
    PHP en remote (Vagrant h00h00!)
    Et de ce que vous utilisez pour développer

    View Slide

  15. La Blackroom
    15
    • Dans une équipe une multitude de logiciels pour un même besoin c’est :
    • Mettre des bâtons dans les roues à l’entraide (raccourcis, navigation dans l’arbo)
    • Un delta en cas de “panne” matériel. Comment gérer le spare ?
    Et de ce que vous utilisez pour développer

    View Slide

  16. La Blackroom
    16
    • Liste de raccourcis (par défaut) : http://www.jetbrains.com/phpstorm/
    documentation/PhpStorm_ReferenceCard.pdf

    • Plugins pour l’écosystème Symfony :
    • Behat / PHPUnit / PHPMD / PHPCS / PHP / PHP Remote Interpreter
    • PHP Advanced autocomplete / PHP Annotations / PHPMetrics / phpspec /
    Symfony2 Plugin / Symfony2 Clickable View / Twig Support
    Et de ce que vous utilisez pour développer

    View Slide

  17. La Blackroom
    Devops et industrialisation

    View Slide

  18. La Blackroom
    18
    • Un peu de Dev
    • Un peu d’Ops
    • Industrialisation (mais sur la phase amont)
    DevOps sur fond d’industrialisation

    View Slide

  19. La Blackroom
    19
    • Se créer sa propre “symfony-standard”
    • https://github.com/black-project/black-standard
    !
    • Utiliser la directory structure 3.0 (et remplacer dès que possible les méthodes qui
    seront dépréciées en 3.0)
    • http://stackoverflow.com/questions/23993295/what-is-the-new-symfony-3-
    directory-structure
    • https://github.com/symfony/symfony/blob/master/UPGRADE-3.0.md
    Un peu de dev

    View Slide

  20. La Blackroom
    20
    • Personnaliser le SensioGeneratorBundle

    app/Resources/SensioGeneratorBundle
    └── skeleton
    └── bundle
    ├── Bundle.php.twig
    ├── Configuration.php.twig
    └── Extension.php.twig
    Un peu de dev

    View Slide

  21. La Blackroom
    21
    • Créer son propre GeneratorBundle
    • https://github.com/black-project/BlackGeneratorBundle
    Un peu de dev

    View Slide

  22. La Blackroom
    22
    • Désigner une personne chargé des PR
    • Utiliser à minima une branche master et des branches feature-* puis hotfix-*
    Un peu de dev

    View Slide

  23. La Blackroom
    23
    • Utiliser phpcs avec PSR-2
    • Utiliser phpmd
    • Utiliser php-cs-fixer
    • http://arnolog.net/post/92715936483/use-fabpots-php-cs-fixer-tool-in-
    phpstorm-in-2-steps par Ronan Guilloux (@arno_u_loginlux)
    Un peu de dev

    View Slide

  24. La Blackroom
    24
    • Pré-provisionner une box via packer
    • http://packer.io
    Un peu d’Ops

    View Slide

  25. La Blackroom
    25
    • Provisionner la box pour en faire une VM
    • Ansible
    • Chef
    • Puppet
    • Le bon vieux bash
    !
    • Et si vous vous sentez, générer des containers Docker que vous enverrez en
    production
    Un peu d’Ops

    View Slide

  26. La Blackroom
    26
    • Mettre en place un Satis
    • https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md
    Un peu d’Ops

    View Slide

  27. La Blackroom
    27
    • Détruire régulièrement vos VM pour vous assurer que personne n’a ajouté quelque
    chose “à la main” sans l’automatiser.
    Industrialisation

    View Slide

  28. La Blackroom
    28
    • Utiliser des indicateurs clés de performance orienté “dev”
    • https://gist.github.com/marekkalnik/e1a9cae6d5266450db29 par Marek Kalnik
    (@marekkalnik)
    Industrialisation

    View Slide

  29. La Blackroom
    29
    • Créer des templates pour
    vous mâcher le travail
    Industrialisation

    View Slide

  30. La Blackroom
    Du code ! (du code ! du code !)

    View Slide

  31. La Blackroom
    31
    • Partout, tout le temps.
    • Ne pas oublier les cookbooks.
    • Mettre le PDF sur votre liseuse : http://symfony.com/pdf/
    Symfony_metabook_master.pdf (909 pages actuellement)
    Lire la doc

    View Slide

  32. La Blackroom
    32
    • Ne pas oublier que Symfony est avant tout de l’objet
    POPO

    View Slide

  33. La Blackroom
    33
    Petite aparté
    WebPage
    Application
    Client
    Person User
    Event Organization
    PostalAddress Date
    GeoCoordinates
    Place
    OppeningHours
    Seat Service Comment

    View Slide

  34. La Blackroom
    34
    • Permet de se projeter et de prendre en charge l’historique de votre travail
    Penser “récurrent”

    View Slide

  35. La Blackroom
    35
    • Permet d’augmenter la qualité du code
    Penser “Open Source”

    View Slide

  36. La Blackroom
    36
    • Ne jamais faire un namespace (MonProjet|MonClient|MaBoite)/MonBundle parce
    que vous ne connaissez pas l’avenir.

    • Privilégier :
    • MonProjet/Bundle/MonBundle
    • MonProjet/(Library|Component)/MaLib
    • MonProjet/(Bridge|Adapter)/MonAdapter
    Namespaces

    View Slide

  37. La Blackroom
    37
    • Même si elles vous paraissent “stupides”, les respecter sur vos Bundles.
    • http://symfony.com/doc/current/contributing/code/conventions.html
    Convention de nommages

    View Slide

  38. La Blackroom
    38
    • Créer des libs et les utiliser à travers un bundle :
    • La librairie vous permet de rentrer dans les composants de Symfony
    • La librairie vous permet d’être cross-framework/cross-cms (FIG standard)
    • Le bundle vous permet de gérer uniquement la partie Symfony


    http://www.slideshare.net/matthiasnoback/the-naked-bundle-symfony-live-
    london-2014 par Matthias Noback (@matthiasnoback)
    Avoir une approche orienté lib

    View Slide

  39. La Blackroom
    39
    • Il existe de la magie la dedans
    • getContainerExtension();
    • registerCommands();
    • getName();
    • getPath(); (mais on passe la dessus)
    *Bundle.php

    View Slide

  40. La Blackroom
    40
    • Economisez-vous un potentiel oubli
    • Passer l’alias de l’extension à la Configuration via un constructeur personnalisé
    DependencyInjection

    View Slide

  41. La Blackroom
    41
    • Créer un maximum de services pour vos éléments “front”
    • Ajouter de la configuration personnalisable via config.yml/
    PrependExtensionInterface()
    • https://github.com/FriendsOfSymfony/FOSUserBundle
    Services

    View Slide

  42. La Blackroom
    42
    • Toujours écrire un Model dont votre Entity/Document/… héritera
    • Mettre vos contraintes dans le Model
    • Mettre votre mapping ORM/ODM dans votre Entity/Document/…
    Model (Solution 1)

    View Slide

  43. La Blackroom
    43
    • Ne faire qu’un Model
    • Utiliser un mapping XML
    • Signaler à Doctrine le changement via la méthode build() et des CompilerPass
    !
    • http://symfony.com/doc/current/cookbook/doctrine/
    mapping_model_classes.html
    Model (Solution 2)

    View Slide

  44. La Blackroom
    44
    • Définir l’$id dans l’application finale
    • Définir toutes vos relations/références dans l’application finale ou vos interfaces
    (attention aux dépendances fortes)
    • http://symfony.com/fr/doc/current/cookbook/doctrine/
    resolve_target_entity.html
    Model

    View Slide

  45. La Blackroom
    45
    • Eliminer les éléments “statiques” via l’injection
    • ‘data_class’
    • getName()
    !
    • Ajouter une intention/modifier le translation_domain
    Form\Type

    View Slide

  46. La Blackroom
    46
    • Jamais de création/traitement de formulaire dans le contrôleur
    • N’oubliez-pas le S de SOLID
    Form\Handler

    View Slide

  47. La Blackroom
    47
    • Créer des ChoiceLists au lieu de mettre un array dans votre Form\Type
    • Injecter le tout
    Form\ChoiceList

    View Slide

  48. La Blackroom
    48
    • Ne pas utiliser le type “entity” ou “document”.
    • Préférer quelque chose d’agnostique via un Transfomer
    • https://github.com/black-project/CommonBundle/blob/master/Application/
    Form/Type/CustomChoiceListType.php
    • https://github.com/black-project/CommonBundle/blob/master/Resources/
    doc/use.md#form---transformer
    EntityType\DocumentType

    View Slide

  49. La Blackroom
    49
    • Ne pas étendre Symfony\Bundle\FrameworkBundle\Controller
    • Un contrôleur = une action
    • Injecter ce dont vous avez besoin
    • Déclarer vos contrôleurs en tant que service
    Controlleurs

    View Slide

  50. La Blackroom
    50
    • Le manager est un point d’entrée vers le repository (qui peut être custom)
    • Interagissez avec le manager jamais avec le repository en direct
    • Ne mettez pas de méthodes getRepository() dans votre Manager
    Manager et repository (Version 1)

    View Slide

  51. La Blackroom
    51
    • Utiliser le D de SOLID et créer une interface pour tous vos repositories
    • Ajouter les méthodes save/delete dans vos repositories
    • Attention au flush (géré via le manager)
    Manager et repository (Version 2)

    View Slide

  52. La Blackroom
    52
    • Bichonner vos requêtes
    • https://www.youtube.com/watch?v=YPLlzte7tgs par Maxime Collin
    (@colin_maxime)
    QueryBuilder

    View Slide

  53. La Blackroom
    53
    • Pour vos traitement lourds via Cron, mettre utiliser un pid
    • Surveiller les signaux systèmes pour interrompre les traitements correctement
    • https://leanpub.com/signalingphp par Cal Evans (@calevans)
    Commandes

    View Slide

  54. La Blackroom
    54
    • Intégrer des ValueObjects
    • Dealer avec ces ValueObjects à la place de l’$id
    Faites un peu de DDD

    View Slide

  55. La Blackroom
    55
    • Approche équivalente au Request -> Response de Symfony
    • Input = Commande
    • Output = DomainEvent
    • Entre les deux, ce que vous voulez
    Faites un peu de CQRS

    View Slide

  56. La Blackroom
    56
    • Utiliser Behat
    • Créer des scénarios simple pour vérifier vos éléments “clés”
    Faites un peu de BDD

    View Slide

  57. La Blackroom
    57
    • Utiliser phpspec
    • Décrire vos objets “métier” et vos méthodes
    Faites un peu de TDD SpecBDD

    View Slide

  58. La Blackroom
    58
    • Bonnes pratiques pour Symfony2 par Tugdual Saunier (@tucksaun)
    • https://www.youtube.com/watch?v=AuhGAvvn2Ws
    • A year with Symfony par Matthias Noback
    • https://leanpub.com/a-year-with-symfony
    !
    • Pourquoi pas une journée d’eXtreme Programming par semaine ?
    • UTILISEZ VOTRE DIF (lorsque vous y avez droit)
    Complément

    View Slide

  59. La Blackroom
    MERCI !
    lablackroom.com
    github.com/black-project
    59

    View Slide