TP - Meal (Partie 1)
Objectifs du TP
Dans ce TP, vous allez apprendre à :
- Créer une application structurée en couches BO, DAO, Service et IHM.
- Manipuler des concepts de base tels que les entités, les relations, et la gestion de la persistance des données.
- Appliquer ces concepts pour gérer des recettes (
Meal) avec leurs ingrédients (Ingredient).
Instructions
1. Définir les Entités
- Créez deux classes principales dans la couche BO (Business Object) :
- Meal : représente un repas. Les attributs incluront :
id: Identifiant unique.name: Nom du repas.ingredients: Liste des ingrédients associés.
- Ingredient : représente un ingrédient. Les attributs incluront :
id: Identifiant unique.name: Nom de l'ingrédient.quantity: Quantité de l'ingrédient utilisée dans un repas.
- Meal : représente un repas. Les attributs incluront :
2. Couche DAO (Data Access Object)
- Implémentez une classe
MealDAOqui aura les responsabilités suivantes :- Stocker une liste de repas en mémoire.
- Ajouter un nouveau repas.
- Récupérer un repas par son identifiant.
- Supprimer un repas.
3. Couche Service
- Implémentez une classe
MealServicequi utiliseraMealDAOpour gérer la logique métier. Les fonctionnalités incluront :- Ajouter un nouveau repas avec des ingrédients.
- Lister tous les repas.
- Récupérer les détails d'un repas spécifique.
- Supprimer un repas par son identifiant.
4. Interface Utilisateur (IHM)
- Développez une simple interface utilisateur textuelle ou graphique permettant à l'utilisateur de :
- Ajouter un repas avec des ingrédients.
- Voir la liste des repas disponibles.
- Afficher les détails d'un repas spécifique.
- Supprimer un repas.
5. Consignes supplémentaires
- Structure : Respectez la séparation des couches pour une meilleure lisibilité et maintenabilité.
- Documentation : Ajoutez des commentaires clairs pour expliquer le fonctionnement de chaque classe et méthode.
6. Critères de Validation
- Les entités sont correctement définies et respectent les relations entre
MealetIngredient. - La persistance des données est gérée via la couche DAO.
- La logique métier est centralisée dans la couche Service.
- L'utilisateur peut interagir avec le programme via l'IHM pour accomplir toutes les actions requises.
Partie 1
Dans un premier temps, commencez par implémenter les deux fonctionnalités principales : getAll et getById.
- Débutez avec la couche BO et DAO.
- Continuez avec la couche Service.
- Terminez par l'implémentation de l'IHM, que ce soit en console ou avec une interface graphique.
A LIRE
Pour l'instant, la gestion des ingrédients n'est pas encore prise en charge.
Schema UML (version 1)

Main
Voici le main déjà développé, débrouillez-vous pour qu'il fonctionne et que les prints s'affichent bien dans la console.
Attention
VOUS NE DEVEZ PAS TOUCHER AU CONTENU DU CODE DANS LE MAIN
Le package sera nommé : fr.eni.tp
Dans la DAO les données initialisées:
private List<Meal> meals = Arrays.asList(
new Meal(1L, "Pizza"),
new Meal(2L, "Salade"),
new Meal(3L, "Pâtes"));
Le Main:
public class Main {
public static void main(String[] args) {
// Initialisation du Service
MealService mealService = new MealService();
// Tester la fonctionnalité getAll
System.out.println("=== Liste de tous les repas ===");
for (Meal meal : mealService.getAll()) {
System.out.println(meal);
}
// Tester la fonctionnalité getById
System.out.println("\n=== Recherche d'un repas par ID ===");
int testId = 2;
Meal foundMeal = mealService.getById(testId);
if (foundMeal != null) {
System.out.println("Repas trouvé pour l'ID " + testId + " : " + foundMeal);
} else {
System.out.println("Aucun repas trouvé pour l'ID " + testId);
}
// Tester un ID qui n'existe pas
int invalidId = 5;
Meal notFoundMeal = mealService.getById(invalidId);
if (notFoundMeal != null) {
System.out.println("Repas trouvé pour l'ID " + invalidId + " : " + notFoundMeal);
} else {
System.out.println("Aucun repas trouvé pour l'ID " + invalidId);
}
}
}