Parse
don’t
Validate
En java
Lead dev à la
Me myself and I
@chanksleroux
@larousso
Whoa!
J’ai trop de bug dans mon application à chaque fois que je change quelque chose
Le code éxistant
01
Une app pour suivre les colis
Suivi de livraison de colis
Un colis passe par les étapes suivantes
Le modèle
Le modèle
La validation
Un peu de théorie
02
Hé Merde !
Type algébrique
de données
N-uplet de données
Ex: Tuple, pojos ...
Type Produit
Type Somme
Union disjointe de types
Ex: Enum, boolean
ADT : Algebric data types in english
Type somme
En gros : un union
Cardinalité = somme des cardinalités
Type produit
En gros : un tuple
Type produit
En gros : un tuple
Cardinalité = produit des cardinalités
Type algébrique
Somme des produits
Cardinalité = somme des cardinalités
En pratique
03
Il nous a bien fait c*@#” avec ses types algébriques
Limiter le champs des possibles
Avoir des types précis
Avoir des types précis
Avoir des types précis
Rendre les états incohérents
impossibles
Pattern matching
Parse
don’t
validate
Parse, don’t validate
HTTP Layer
Domain
Parsing
Unsafe
Safe
Toute ressemblance avec l’archi hexa n’est que pure hasard
Base de données
Parsing
Parsing : les options
Approche DTO
DTO à l’image du request body http
Copie de données vers le type algébrique
Parsing JSON
On parse directement le json pour construire notre type algébrique
Parsing JSON
Parsing JSON
Parsing json
Quelques inconvénient
Plus de code
DTO, parser …
Données en BDD
Attention il faut savoir lire les données stockées même avec un mauvais format
Aller plus loin
Pas d’effets de bord
Toutes les entrée sont couvertes
Une variable n’est pas modifiable
Tout peut être manipulé comme une valeur
Fonction pure
Fonction totale
Immutabilité
Transparence référentielle
Immutabilité
VS
VS
Fonction pure
VS
VS
Fonction totale
Un résultat est produit pour chacune des entrées
VS
Transparence référentielle
Une expression peut être remplacée par une valeur