1 of 37

Parse

don’t

Validate

En java

2 of 37

Lead dev à la

  • Java
  • Scala
  • Kotlin
  • JS

Me myself and I

@chanksleroux

@larousso

3 of 37

Whoa!

J’ai trop de bug dans mon application à chaque fois que je change quelque chose

4 of 37

Le code éxistant

01

Une app pour suivre les colis

5 of 37

Suivi de livraison de colis

Un colis passe par les étapes suivantes

  • Nouveau colis
    • Email, adresse, date d’envoi
  • Colis pris en charge
    • Référence, email, adresse, date d’envoi
  • Colis en cours d’acheminement
    • Référence, email, adresse, date d’envoi, coordonnées GPS
  • Colis reçu
    • Référence, email, adresse, date d’envoi, date de réception

6 of 37

Le modèle

7 of 37

Le modèle

8 of 37

La validation

9 of 37

Un peu de théorie

02

Hé Merde !

10 of 37

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

11 of 37

Type somme

En gros : un union

Cardinalité = somme des cardinalités

12 of 37

Type produit

En gros : un tuple

13 of 37

Type produit

En gros : un tuple

Cardinalité = produit des cardinalités

14 of 37

Type algébrique

Somme des produits

Cardinalité = somme des cardinalités

15 of 37

En pratique

03

Il nous a bien fait c*@#” avec ses types algébriques

16 of 37

Limiter le champs des possibles

17 of 37

Avoir des types précis

18 of 37

Avoir des types précis

19 of 37

Avoir des types précis

20 of 37

Rendre les états incohérents

impossibles

21 of 37

22 of 37

23 of 37

24 of 37

Pattern matching

25 of 37

Parse

don’t

validate

26 of 37

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

27 of 37

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

28 of 37

Parsing JSON

29 of 37

Parsing JSON

30 of 37

Parsing json

31 of 37

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

32 of 37

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

33 of 37

Immutabilité

VS

VS

34 of 37

Fonction pure

  • Les mêmes arguments doivent produire les mêmes résultats
  • Pas d’effets de bord

VS

VS

35 of 37

Fonction totale

Un résultat est produit pour chacune des entrées

VS

36 of 37

Transparence référentielle

Une expression peut être remplacée par une valeur

37 of 37

Merci!

Questions ?

https://github.com/larousso/parse-dont-validate-java

Please keep this slide for attribution

CREDITS: This presentation template was created by Slidesgo, including icon by Flaticon, and infographics & images from Freepik