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
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
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 ?
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
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
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
La Blackroom 20 • Personnaliser le SensioGeneratorBundle app/Resources/SensioGeneratorBundle └── skeleton └── bundle ├── Bundle.php.twig ├── Configuration.php.twig └── Extension.php.twig Un peu de dev
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
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
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
La Blackroom 28 • Utiliser des indicateurs clés de performance orienté “dev” • https://gist.github.com/marekkalnik/e1a9cae6d5266450db29 par Marek Kalnik (@marekkalnik) Industrialisation
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
La Blackroom 33 Petite aparté WebPage Application Client Person User Event Organization PostalAddress Date GeoCoordinates Place OppeningHours Seat Service Comment
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
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
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
La Blackroom 39 • Il existe de la magie la dedans • getContainerExtension(); • registerCommands(); • getName(); • getPath(); (mais on passe la dessus) *Bundle.php
La Blackroom 40 • Economisez-vous un potentiel oubli • Passer l’alias de l’extension à la Configuration via un constructeur personnalisé DependencyInjection
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
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)
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)
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
La Blackroom 45 • Eliminer les éléments “statiques” via l’injection • ‘data_class’ • getName() ! • Ajouter une intention/modifier le translation_domain Form\Type
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
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
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)
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)
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
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
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