⚠️ Attention,

Ce talk contient du code pouvant heurter la sensibilité des plus crafts.

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Shodo.io

@SHODOioFR

Architecturoplastie hexagonale d’un backend Node.js : Opération à code ouvert       

@AdrienJoly

@JulienTopcu

@JkNourry

👨🏽‍⚕️

👨🏽‍⚕️

👨‍⚕️

@AdrienJoly

@JulienTopcu

@JkNourry

Dr. Adrien Joly

Techleaderie JavaScriptale

No Dr. Julien Topçu

No Dr. Jordan Nourry

Coachologie
Craftsmanshippienne

Coachologie Technique

👨🏽‍⚕️

👨🏽‍⚕️

👨‍⚕️

Patient: OpenWhyd.org

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Préparation du terrain opératoire:

Biopsies Clean Codiennes

@AdrienJoly

@JulienTopcu

@JkNourry

Opération du Patient

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Diagnostic

Glaucome de la lisibilité du code

 

Identification de la Pathologie

Couplage métastasé (fort) entre les différents organes (couches)

 

Hémorragie généralisée des responsabilités

Métier, base de données, parsing de requête

 

Malformation du système TESTo-endocrinien

Manque de pertinence et ciblage précis de l'erreur, filet de sécurité défaillant

 🩺

@AdrienJoly

@JulienTopcu

@JkNourry

Diagnostic

Rigidité (pré-cadavérique) : Ramener de la lisibilité cause des bugs

 

Caractérisation des Symptômes

Fragilité : Une modification mineure dans le Controlleur casse la base de données

 

Immobilité : Le transfert de la création des requêtes de base de données vers la couche de persistence est compliqué

 

Opacité : Compréhension et lisibilité du code limitées

 

🌡️

Viscosité : remboursement des tests et séparation des responsabilités coûteux en l'état

@AdrienJoly

@JulienTopcu

@JkNourry

S.O.L.I.D

Pourriture Logicelle

Opacité

Rigidité

Fragilité

Immobilité

Viscosité

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Renforcer la surveillance des constantes du patient : Approval Testoscopie

@AdrienJoly

@JulienTopcu

@JkNourry

Opération du Patient

@AdrienJoly

@JulienTopcu

@JkNourry

💉

Bilan d'étape

Ciblage chirurgicale des erreurs                                                                             ↘️Opacité  

 

Contrats d'entrée et sortie rendus explicites                                                        ↘️Opacité

 

Filet de sécurité des Approval Tests permettant un pivot de refactoring        ↘️Viscosité

 

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Réduction de la charge mentale tumorale par Clean Codepexie

@AdrienJoly

@JulienTopcu

@JkNourry

Opération du Patient

@AdrienJoly

@JulienTopcu

@JkNourry

💉

Bilan d'étape

Nommage explicite dans le code                                                                            ↘️Opacité

 

Réduction de la charge cognitive                                                                            ↘️Opacité

Single Level of Abstraction

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Diagnostic

Immobilité :

La logique métier est peu réutilisable car diffuse dans le Controller et la persistence

Identification de la Pathologie

 🩺

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

3 formes de Complexité

Essentielle

Obligatoire

Accidentelle

@AdrienJoly

@JulienTopcu

@JkNourry

Architecture Hexagonale

Le Traitement

source: beyondxscratch.com

@AdrienJoly

@JulienTopcu

@JkNourry

source: beyondxscratch.com

@AdrienJoly

@JulienTopcu

@JkNourry

source: beyondxscratch.com

@AdrienJoly

@JulienTopcu

@JkNourry

source: beyondxscratch.com

@AdrienJoly

@JulienTopcu

@JkNourry

source: beyondxscratch.com

@AdrienJoly

@JulienTopcu

@JkNourry

Complexité Essentielle

Complexité Obligatoire

Complexité Obligatoire

↘️Complexité Accidentelle

Infrastructure

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Introduction de la couche métier : Domainoplastie

@AdrienJoly

@JulienTopcu

@JkNourry

Incision

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Domaine Passe-Plat

@AdrienJoly

@JulienTopcu

@JkNourry

Opération du Patient

@AdrienJoly

@JulienTopcu

@JkNourry

Domaine Passe-Plat

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Greffe de la logique métier par lobotomie de la couche de persistence

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Couplagectomie

@AdrienJoly

@JulienTopcu

@JkNourry

Couplagectomie

@AdrienJoly

@JulienTopcu

@JkNourry

Opération du Patient

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

💉

Bilan d'étape

Création de tests fonctionnels                                                           ↘️Opacité ↘️Viscosité

 

Définition et détourage des responsabilités          ↘️Opacité ↘️Immobilité ↘️Viscosité

Objets métier, API & SPI du domaine

 

Isolation du domaine                                                                           ↘️Fragilité ↘️Rigidité

Utilisation strict des objets métier & SPI

 

Rapatriement de la logique métier      ↘️Rigidité ↘️Fragilité ↘️Immobilité ↘️Viscosité

 

Typage                                                                               ↘️Opacité ↘️Fragilité ↘️Viscosité

JSDoc

 

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Anastomose Domaino-persistence

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Infrastructure

@AdrienJoly

@JulienTopcu

@JkNourry

Opération du Patient

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

💉

Bilan d'étape

Structure de données de la persistence explicite                           ↘️Opacité ↘️Viscosité

UserDocument

 

Anti-Corruption Layer                                                      ↘️Fragilité ↘️Rigidité ↘️Viscosité

Contrat de UserCollection dépend que des objets métier

Mapping UserDocument => User, parseInt(id), initialisation de Playlist[]

 

Externalisation de la migration de données                ↘️Fragilité ↘️Rigidité ↘️Viscosité

 

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Couplagectomie du Controller

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Couplagectomie

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Opération du Patient

@AdrienJoly

@JulienTopcu

@JkNourry

💉

Bilan d'étape

Découplage des différents organes                                              ↘️Rigidité ↘️Immobilité

Controller, Domaine, Persistence

Composition Root (Application)

@AdrienJoly

@JulienTopcu

@JkNourry

@AdrienJoly

@JulienTopcu

@JkNourry

Recoudre le patient : 
Intégration Testorraphie par ablation des Approval Tests

 

@AdrienJoly

@JulienTopcu

@JkNourry

Approval Tests

Functional Tests

?

?

@AdrienJoly

@JulienTopcu

@JkNourry

💉

Bilan d'étape

Décommissionnement des Approval Tests                  ↘️Opacité ↘️Fragilité ↘️Viscosité

Tests fonctionnels

Tests d'intégration du Controller

Tests d'intégration de la Persistence

@AdrienJoly

@JulienTopcu

@JkNourry

💉

Bilan de l'opération

Stratégie de Refactoring non prédictive

Test & Learn, Fail Fast, Mikado

 

Besoin d'un filet de sécurité efficace

Approval Tests

 

Réduction de la charge cognitive                 

Clean Code, Typage

 

@AdrienJoly

@JulienTopcu

@JkNourry

💉

Bilan de l'opération

Augmentation de la Robustesse

Ajouts de ≠ types de tests

Structure de données et Contrats explicites

Externalisation de la migration de données

 

Augmentation de la Maintenabilité

Emergence & Isolation du Domaine

Ségrégation des Responsabilités
Gestion des
complexités via l'Architecture Hexagonale

Tests F.I.R.S.T.

 

@AdrienJoly

@JulienTopcu

@JkNourry

MERCI

N'oubliez pas de noter ce talk ! 🙏

Architecturoplastie hexagonale d’un backend Node.js : Opération à code ouvert

By Julien Topçu

Architecturoplastie hexagonale d’un backend Node.js : Opération à code ouvert

Votre backend n'a même pas 3 ans et pourtant, il n’est pas en forme. Il devient difficile d’y ajouter de nouvelles fonctionnalités, de maintenir et/ou de refactorer l’existant. Le code est intolérant à la montée de versions de librairies, pouvant lui causer une régressionnite fonctionnelle aiguë. Les tests deviennent douloureux à l’écriture. Les précédents choix techniques ont comme effet secondaire de limiter ou verrouiller l’évolution du logiciel, à un point où il devient tentant de repartir de zéro. Votre backend commence lentement à pourrir, son architecture s’étant sclérosée. Mais savez-vous qu’il existe différents types de complexité logicielle ? Et que bien les identifier en les séparant avec un pattern d’architecture adapté, peut améliorer la pérennité de nos applications ? Et tout ça, quels que soient les frameworks que vous utilisez ? Dans cette opération à code ouvert sous forme d’un mob-programming intéractif, venez découvrir comment redonner un coup de jeune à votre backend à bout de souffle en le faisant migrer vers de l’Architecture Hexagonale.

  • 1,373