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/EntityTemplates
- 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