TD -
Domain-Driven-Design
Ce TD a pour objectif de:
- Coder une application en suivant les patterns tactiques :
Value Object, Entity et Aggregate.
- Vous créerez des classes du domaine en respectant ces
patterns.
Gestion d'une application de Ecommerce.
Pour ce premier TD vous aurez à développer le catalogue de
références ainsi que la gestion d'un panier d'un magasin de
Ecommerce.
Couche Domain
La couche Domain contient les concepts métier suivants (ils
correspondent à des objets de votre modèle) :
- Reference : une référence produit.
- ref : une chaine de caractères alphanumérique
unique - 20 caractères max.
- nom : le nom court - 20 caractères max.
- description : la description de la référence -
220 caractères max.
- prix : un entier positif
On considère qu'aucune proprieté de la référence ne change avec
le temps . Le prix d'une référence ne change pas. Si des
promotions sont à appliquer, elles seront réalisées au niveau du
panier.
- Basket : le panier électronique.
.
- Un panier contient des lignes de commandes.
.
- Une ligne de commande cible une seule référence.
- Une ligne de commande contient la quantité de produit commandé.
- Une ligne de commande a un montant qui correspond au
prix de la référence multiplié par la quantité.
- Un panier a un montant qui correspond à la somme des
lignes de commandes.
- Un panier ne peut avoir plusieurs lignes de commande pour
la même référence.
- On peut ajouter une référence avec une quantité à un
panier.
- On peut supprimer une référence d'un panier .
- On peut valider un panier - il n'est plus possible
de la modifier après cette opération.
Couche Infra
Vous devez mettre en place une infrastructure qui vous permettra de
sauvegarder les paniers :
- en mémoire vive
- dans un fichier du format de votre choix : fichier texte,
fichier JSON ....
Pour se faire vous allez :
- Définir un repository pour les paniers BasketRepository
à l'aide d' une interface dans la couche Domain.
Ajouter de nouvelles implémentations dans la
couche infrastructure en fonction de la sauvegarde que vous
avez implémentée : inmemory .....
command.excute), cette classe devra avoir une
méthode de thread (run) dont le but est d'aller récupérer
une commande dans la liste et de l'exécuter.
- Construire la classe BagOfCommands qui permet
d'ajouter des commandes (pushCommand()) et de retirer des commandes (getCommand()).
La couche interface utilisateur
- Construire une classe qui sera le modèle de votre UI.
- Cette classe devra contenir tous les éléments de votre interface
graphique ou de votre interface alpha/numérique si vous n'avez pas
le temps de faire une interface graphique.
- Vous pouvez si besoin conserver dans cette classe des
informations qui vous permet de communiquer avec la couche
application : référence d'un panier, contexte de l'utilisateur ...