From Legacy to

L'histoire du monde revue par 

Arnaud Benassy

Dev Full-Stack LAMP, 9+ années d'XP incluses

@abenassy

arnaud@wizacha.com

Wizacha ?

Wizacha ?

  • Petites annonces sécurisées gratuites
  • Business model freemium + pub
  • Projet démarré en 2012
  • Lancement prévu au 1er Janvier 2013

Besoin de générer du trafic

Comment ?

titre

Préhistoire

  • Développement confié à un prestataire
  • Framework propriétaire
  • Fonctionnement étrange
  • Montée en charge impossible
  • Sécurité "optimiste"
  • 6 mois de retard

Préhistoire 

Renaissance 

Achat d'une base de code déjà existante, histoire de pouvoir se lancer

 

Renaissance

Premiers contacts avec Symfony pour un client

  • Chic, des bundles super bien faits
  • La console c'est top :)
  • Doctrine, c'est le pied

Et aussi des bundles mal documentés (c'est mal)...

Renaissance

Pendant ce temps-là, chez Wizacha

 

  • Fichiers de 10 000 lignes
  • Des jolies lignes de 9 000 caractères
  • Des globales de partout
  • Un analyseur de queries ...en REGEX
  • Que du procédural
  • Impossible à tester

Doctrine

Pour un module de discussion tout neuf,

complètement séparé du reste du projet

Event dispatcher

Parce qu'on n'en pouvait plus de devoir gérer nos events à la main, comme en 1800

Monolog

Suffisamment souple pour cohabiter avec l'existant

Plein de handlers

Simple à intégrer, un vrai moment de bonheur

HttpFoundation, le déclencheur

Nouveau code écrit en utilisant les Request / Response HttpFoundation, mais ...

 

On préserve l'ancien système

HttpFoundation

Pourquoi préserver l'ancien système ?

Pas les moyens de s'offrir une migration complète

 

Quelles difficultés ?

Appli Legacy modifiait automatiquement le $_REQUEST, donc besoin de trier proprement les requêtes

 

HttpFoundation, encore

Joies de la migration douce :

  • L'authentification est faite sur un controller Legacy, doit être dispo partout
  • Le panier est créé / updaté via un controller SF, le paiement fait par un Legacy

 

Le + simple : écrire un BridgeSessionStorage pour une gestion propre

Forms

Un bonheur à utiliser

Forms

... sauf si on décide d'utiliser autre chose que Twig

Service Container

Cool, nos Controller sont maintenant ContainerAware

Routing

Intégration des routes statiques seulement.

 

Pour le moment...

 

Next ?

What else ?

  • Migrer les entités (on va se marrer)
  • OptionResolver pour se passer des modules existants
  • FOSUser ?
  • Twig ?
  • Intégrer le kernel SF pour se passer définitivement de la précédente base de code ?

Des commentaires, questions, suggestions ?

@abenassy

arnaud@wizacha.com

From Legacy to Symfony

By Arnaud Benassy

From Legacy to Symfony

Talk SfPot 27/05/2015

  • 2,785