L’amour en

Héritage

Kezako ?

 

Vincent Beauvivre. Smile.

Lead tech à tout faire

 

L’amour en héritage

Rex et guide de survie en milieu ayant pré-existé

 

 

 

Et une brève histoire du cinéma des années 30 aux années 60

Comprendre

Analyser

Planifier

Outiller

Permuter

Moderniser

Opportuniser

Comprendre

Analyser

Le monstre

  • Config apache / nginx
  • Point d’entrée unique
  • Librairies
  • MVC
  • Urls
  • Lignes de commande
  • Classes

Analyse statique

  • PHPLoc Mesurer
  • Phan Prévoir
  • PHPMD Éviter les bugs
  • PhpMetric Communiquer

 

  

 

Planifier

Communiquer

Se faire comprendre !

  • Rendre visuel
  • Dette technique
  • Lien avec le vécu
  • Refonte / évolution / transition

Décider

  • Technique
    • Fonctionnalités
    • Documentation
    • Maintenance
  • Humain
    • Équipe
    • Management

Outiller

Versionner

La loi et l’ordre

Déployer

Convoyeur de fonds

Tester

  • Smoke test
  • Toutes les pages

Conteneuriser

Reproduire la prod

Maintenir

  • Git hooks
  • Grump PHP

Formater

  • PHP CS Fixer
  • PSR-12

Ranger ses affaires

  • config
  • srcLegacy
  • public
  • var/[cache,logs]

Dépendances

  • Nettoyage
  • Composer

Classes et espace de nom

  • PSR-4
  • Autoload
{
    "autoload": {
        "psr-4": {"AcmeLegacy\\": "srcLegacy/"}
    }
}

Permuter

Du neuf !

  • Composer require
  • point d’entrée dans public/
  • config dans … config/
  • bin/ ?
  • src/

2 entrées

  • Router les requêtes
location @rewriteapp {
    rewrite ^/path(.*)$ /symfony.php/$1;
    rewrite ^(.*)$ /codeIgniter.php/$1;
}

Base de données

  • Rétro-ingénierie
 php bin/console doctrine:mapping:import
 "App\Entity" annotation --path=src/Entity

Templates

  • Partager

Avancer

  • Convaincre le managment
  • Stimuler l’équipe
  • Coder

Moderniser

Injecteur de dépendance

Conteneur d’injection de dépendance «maison»

class Container
{
    private $services = [];

    public function __construct()
    {
        $this->services[LegacyClass::class] = new LegacyClass();
    }

    public function get($serviceName) 
    {
        return $this->service[$serviceName];
    }
}
class Container
{
    private $services = [];
    private $servicesBuilder = [];

    public function __construct()
    {
        $this->servicesBuilder[LegacyClass::class] = function() {
          return new LegacyClass($this->get(OtherClass::class));
        }
    }

    public function get($serviceName)
    {
        $this->services[$serviceName] = $this->servicesBuilder[$serviceName]();
      
      	return $this->services[$serviceName];
    }
}

Refactoring

  • Dépendances = complexité
  • Découpage fonctionnel
  • Tests unitaires

Frontend

  • Dépendances avec NPM
  • JS en modules
  • Webpack

Opportuniser

Infiltrer

  • Identifier le métier
  • Le séparer
  • L’exposer

Legacy

Domain

Domain Driven

Design !

  • Bubble context
  • Value Object
  • Ubiquitous Language

Legacy

Domain

Transition

D’un même cœur

Legacy

Domain

New

Love

Expérience développeur

Merci !

        Avec, par ordre d’apparition

  • Gone with the Wind (1939)

  • 12 Angry Men (1957)

  • Frankenstein (1931)

  • Rear Window (1954)

  • Singin' in the Rain (1952)

  • A Night at the Opera (1935)

  • Rio Bravo (1959)

  • The Man They Could Not Hang (1939)

  • The Night of the Living Dead (1968)

  • The sword in the stone (1963)
  • Lawrence of Arabia (1962)
  • Lolita (1962)
  • Jason and the argonauts (1963)

  • Citizen Kane (1941)

  • Mary Poppins (1964)

  • Rebel Without a Cause (1955)

  • The great escape (1963)

  • Modern Times (1936)

  • Two for the Road (1967)

  • From russia With Love (1963)

  • 8½ (1963)

  • The Thomas Crown Affair (1968)

  • Casablanca (1942)

Afup days Nantes 2020

By vibby

Afup days Nantes 2020

L’amour en héritage

  • 9