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 :
-
Nous allons développer l’implémentation minimale nécessaire pour gérer la création d’une
CommandeLivraison. -
Nous allons nous abonner au sujet
commandes-cuisineet, surEvenementCommandeCuisineAssemblageFini, nous allons créer unCommandeLivraisoncorrespondant.
Vous pouvez exécuter com.pizzeria.suites.Lab7Suite pour vérifier votre progression dans ce laboratoire.
2. Instructions
-
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
ReferenceCommandeCuisineetReferenceCommandeEnLigne. -
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
-
-
La classe
CommandeLivraisondoit avoir un constructeur annoté avec@Builderet un constructeur sans paramètres. -
La classe
CommandeLivraisondoit 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 internalStatevalue.
-
-
Implémentez la méthode
apply()de la classeCommandeLivraison.Accumulateur.-
Cette méthode doit créer une nouvelle instance de
CommandeLivraisonà partir de l’événementEvenementCommandeLivraisonAjouteepassé en paramètre.
-
-
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. -
Complétez l’implémentation de la classe
ReferenceCommandeLivraison. -
Complétez l’implémentation de la méthode
DepotEvenementCommandeLivraisonEnCoursDeTraitement.rechercheParReferenceDeCommandeCuisine(). Vous aurez besoin de créer un index pour retrouver uneReferenceCommandeLivraisonà partir d’une instance deReferenceCommandeCuisine. Cet index doit être mis à jour chaque fois qu’une instance deCommandeLivraisonest 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.
-
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énementEvenementCommandeCuisineAssemblageFini, elle devra créer une instance deCommandeLivraison.Après, complétez l’implémentation de la méthode
ServiceLivraison.retrouverCommandeLivraisonParReferenceCommandeCuisine().