TP6 7 - S’abonner à un événement du domaine cuisine à partir d’un agrégat adjacent et mettre à jour l’état

1. Résumé

Il est souvent utile de s’abonner aux événements publiés par les agrégats dans d’autres contextes bornés. Nous en avons vu un exemple dans le contexte Cuisine. Chaque fois qu’un événement EvenementCommandeEnLignePayee est publié, une nouvelle commande CommandeCuisine est ajoutée au référentiel.

Dans ce TP, nous allons créer une collaboration similaire entre les contextes Cuisine et Livraison.

Nous allons réaliser deux scénarios :

  1. Nous allons développer l’implémentation minimale nécessaire pour gérer la création d’une CommandeLivraison.

  2. Nous allons nous abonner au sujet commandes-cuisine et, sur EvenementCommandeCuisineAssemblageFini, nous allons créer un CommandeLivraison correspondant.

Vous pouvez exécuter com.pizzeria.suites.Lab7Suite pour vérifier votre progression dans ce laboratoire.

2. Instructions

  1. Lors de la création (instatiation) d’une CommandeLivraison, l’instance doit stocker les propriétés suivantes :

    • Une référence à la commande de livraison`ReferenceCommandeLivraison`

    • Des références à la commande cuisine et à commande en ligne, respectivement ReferenceCommandeCuisine et ReferenceCommandeEnLigne.

    • Une collection d’objets de la classe Pizza, copiés à partir du contexte Cuisine.

    • Son état interne. Dans ce TP, nous n’implémenterons qu’une seule valeur (identificateur) de Etat : PRET_POUR_LIVRAISON.

    • Ajoutez l’identificateur approprié à l’énumération CommandeLivraison.Etat

  2. La classe CommandeLivraison doit avoir un constructeur annoté avec @Builder et un constructeur sans paramètres.

  3. La classe CommandeLivraison doit implémenter les méthodes suivantes :

    • identite()

    • fonctionAccumulateur()

    • getRef() (Vous pouvez utiliser les annotations Lambok à la place)

    • etat()

    • estPretPourLaLivraison() - HINT: you’ll want to base this on the internal State value.

  4. Implémentez la méthode apply() de la classe CommandeLivraison.Accumulateur.

    • Cette méthode doit créer une nouvelle instance de CommandeLivraison à partir de l’événement EvenementCommandeLivraisonAjoutee passé en paramètre.

  5. Implémentez la classe CommandeLivraison.EtatCommande, qui doit contenir des références vers les commandes de (i) livraison, (ii) de cuisine, (iii) en ligne et (iv) une liste de pizzas.

  6. Complétez l’implémentation de la classe ReferenceCommandeLivraison.

  7. Complétez l’implémentation de la méthode DepotEvenementCommandeLivraisonEnCoursDeTraitement.rechercheParReferenceDeCommandeCuisine(). Vous aurez besoin de créer un index pour retrouver une ReferenceCommandeLivraison à partir d’une instance de ReferenceCommandeCuisine. Cet index doit être mis à jour chaque fois qu’une instance de CommandeLivraison est ajouté au dépôt. Pour cela, ce dépôt devra s’abonner au bon thème du journal des événements.

    Si vous cherchez un peu d’inspiration, regardez le code que vous avez implémenté pendant le TP5.

  8. Enfin, terminez l’implémentation de la classe ServiceLivraison. À la construction d’une instance, elle doit s’abonner au thème "commande-cuisine" du journal des événements et, lors de l’arrivée d’un événement EvenementCommandeCuisineAssemblageFini, elle devra créer une instance de CommandeLivraison.

    Après, complétez l’implémentation de la méthode ServiceLivraison.retrouverCommandeLivraisonParReferenceCommandeCuisine().