TP6 - Exposer l’interface métier de la cuisine et mettre en œuvre les transactions
1. Résumé
Dans le DDD, nous utilisons un service d’application pour exposer les opérations impliquant des agrégats et des dépôts, ou plusieurs agrégats. Un service d’application est le premier client immédiat du modèle du domaine principal.
Nous utiliserons l’interface d’un service d’application pour exposer ses opérations sous forme d’une API REST ou d’une collaboration pilotée par messages à l’aide des courtiers de messagerie RabbitMQ ou Kafka.
Dans ce TP, nous allons créer le service d’application pour le contexte Cuisine.
Nous allons réaliser 10 scénarios :
-
La possibilité de trouver une commande
CommandeCuisineà partir de sa référenceReferenceCommandeEnLigne. -
Lorsqu’un événement
EvenementCommandeEnLignePayeeest publié par le contexte Commande, créer une commandeCommandeCuisine. -
La possibilité de commencer la préparation d’une commande
CommandeCuisine. -
Lorsqu’un événement
EvenementCommandeCuisinePreparationCommenceeest publié, créer unePizzapour chaque commandeCommandeCuisine.Pizza, puis commencer le dressage de chaquePizza. -
La possibilité de terminer la préparation d’une
Pizza. -
Lorsqu’un événement « EvenementPizzaDressageFinie » est publié, commencer la cuisson de la pizza.
-
Lorsqu’un événement
EvenementPizzaCuissonCommenceeest publié, commencez à cuire la commande. -
La possibilité de retirer une pizza du four.
-
Lorsque la première pizza d’une commande est cuite (c’est-à-dire
EvenementPizzaCuissonFinie), commencez à assembler la commande. -
Lorsque la dernière pizza d’une commande est cuite, terminez l’assemblage de la commande.
Vous pouvez exécuter la suite de tests com.pizzeria.suites.Lab6Suite pour vérifier votre progression.
2. Instructions.
-
Regardez le code source du service
ServicePaymentDefautet basez-vous sur ce code pour réaliser les tâches suivantes. -
Implémentez les commandes du service d’application
ServiceCuisineDefautsuivantes :-
commencerPreparationCommande() -
terminerPreparationPizza() -
retirerPizzaDuFour().
-
-
Implémentez les recherches du service d’application `ServiceCuisineDefaut suivantes :
-
findKitchenOrderByRef() -
findKitchenOrderByOnlineOrderRef() -
findPizzaByRef() -
findPizzasByKitchenOrderRef()
-
-
L’instantiation du service
ServiceCuisineDefautdoit réaliser les tâches suivantes :-
Souscrire au
Theme"commandes". Lors d’un événementEvenementCommandeEnLignePayee, récupérez laCommandeEnLigneassociée par saRef. Convertissez laCommandeEnLigneenCommandeCuisineet ajoutez-la au dépôt. -
Souscrire au
Theme"commandes-cuisine". Lors d’un événementEvenementCommandeCuisinePreparationCommencee, créez unePizzapour chaqueCommandeCuisine.Pizzaet ajoutez-la au dépôt. Ensuite, appelez la méthodecommencerPréparation()sur l’instance dePizza. -
Souscrire au
Theme"pizzas" :-
Lors d’un événement
EvenementPizzaDressageFinie, récupérer l’instance de « Pizza » associée et lancezcommencerCuisson(). -
Lors d’un événement
EvenementPizzaCuissonCommencee, récupérer l’instance deCommandeCuisineassociée. Si l’instance deCommandeCuisineest en cours de préparation, appeler la méthodecommencerCuisson(). -
Lors d’un événement
EvenementPizzaCuissonFinie, récupérer la commandeCommandeCuisineassociée. Si la commandeCommandeCuisineest en cours de cuisson, exécutezcommencerAssemblage(). Ensuite, récupérez toutes les instances dePizzaassociées. Si toutes les pizzas ont fini de cuire, appeler la méthodeterminerAssemblage()sur l’instance deCommandeCuisine.
-
-