📐 Construire une app en JS
03 Principes De Conception

import { Callout } from 'nextra/components'

Principes de conception

Procédural, orienté-objet ou fonctionnel.

Que dire du paradigme de notre test ?

const booking = book(accomodation, tenant, stay);
expect(booking.status).toBe("confirmed");

C'est plutôt fonctionnel.

En programmation orienté objet, on aurait peut-être écrit :

const booking = accomodation.book(tenant, stay);
expect(booking.status).toBe("confirmed");

Il n'y a pas de réponse définitive. Chacun code avec le paradigme qu'il maîtrise le mieux.

En revanche, c'est quand même préférable de conserver de la cohérence sur la façon de faire. Mais ne décidons pas maintenant.

Laissons les tests nous guider.

Entités et valeurs

Pour avancer je propose un exercice simple : Séparons ce qui existe déjà dans le système (l'état) et ce qui est éphémère (les paramètres).

*L'hébergement accomodation existe déjà.

Il faut qu'il soit créé au départ, pour recevoir de multiples demandes de réservations. Il a une identité unique : son adresse. C'est donc une entité.

Même chose pour l'utilisateur tenant qui effectue une réservation.

C'est une personne qui peut faire plusieurs réservation. Elle a aussi une identité unique (laquelle ? Son numéro de sécurité sociale ? Son email ? Un numéro unique alloué par la plateforme ? Nous reviendrons à ce sujet de l'identité). C'est donc aussi une entité.

Mais quid du détail tenant du séjour : dates de début/fin, nombre de personnes ?

C'est une donnée temporaire. Elle ne fait que passer le temps de la demande de réservation. En cas de nouvelle réservation, ce sera avec d'autres paramètres.

Cette donnée n'a pas d'identité.

C'est donc une valeur.

Qu'est-ce que ça change ?

Une entité persiste.

Lorsqu'on se déconnecte de notre plateforme et que l'on revient le lendemain, l'hébergement que l'on avaot repéré existe encore (mais peut-être plus disponible aux dates qui nous arrangent).

Une entité est mutable (= modificable). On la créé, on la modifie, puis on la conserve pour être utilisée et modifiée plus tard.

En revanche, une valeur est éphémère.

Elle n'existe que dans le contexte de la réservation que l'utilisateur est en train de réaliser. Cela ne signifie pas qu'elle ne sera pas enregistrée en base de données. Mais seulement que c'est un paramètre, utilisé à un moment donné, qui n'a pas vocation à être modifié.

Une valeur est immutable. On la créé, on l'utilise, puis on la jette.