⚠️ 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
👨🏽⚕️
👨🏽⚕️
👨⚕️
@AdrienJoly
@JulienTopcu
@JkNourry
Patient: OpenWhyd.org
@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
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
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
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 ! 🙏
[2h]Architecturoplastie hexagonale d’un backend Node.js : Opération à code ouvert
By Julien Topçu
[2h]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.
- 458