Le cours de Conception de Projet :

Approche Objet - Master 1 Informatique

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 ...