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

Benoit Viguier

Dev, ex CTO @Wizacha

@b_viguier

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

Ne jamais repartir from scratch

Préhistoire 

Le chemin le plus court

Legacy

Produit existant

Renaissance 

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

 

Renaissance

Mais tout n'est pas parfait

 

  • 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

Le plan

  • Utiliser l'outil
  • Modifications externes
  • Modifications internes
  • Migration

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)...

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 (BBL edition)

By Arnaud Benassy

From Legacy to Symfony (BBL edition)

BBL Y-Proximité 09/06/2015

  • 1,955