880 Words

Objectifs pédagogiques

Cette étude de cas, filée sur l’ensemble des 13 séances du cours, s’appuie sur un projet unique, AutoLoc, enrichi progressivement à chaque atelier. Elle fait observer la construction incrémentale d’une architecture logicielle complète, depuis la modélisation jusqu’à l’évaluation de la qualité et aux pistes d’amélioration continue.

1. Contexte métier

AutoLoc est une entreprise de location de véhicules disposant de plusieurs agences réparties dans différentes villes. Chaque agence gère une flotte de véhicules de catégories variées (citadine, berline, SUV, utilitaire). Les clients réservent un véhicule pour une période donnée ; à la signature, un contrat est établi et des paiements y sont rattachés.

L’entreprise souhaite numériser l’ensemble du processus (réservation, contractualisation, facturation, suivi de flotte, relances automatiques) au travers d’une application back-end Spring Boot exposant une API REST.

2. Acteurs du système

RôleDescriptionDroits principaux
ClientParticulier ou professionnel souhaitant louer un véhicule.Consulter les véhicules disponibles, créer/annuler une réservation, consulter ses contrats.
Agent d’agenceEmployé en charge de la gestion opérationnelle d’une agence.Gérer les véhicules, valider une réservation, établir un contrat, enregistrer un paiement.
Responsable d’agence (Manager)Supervise une agence et son personnel.Droits Agent, plus gestion des employés et consultation des statistiques de l’agence.
AdministrateurAdministre la plateforme.Gestion des agences, des catégories de véhicules, statistiques globales, configuration.

3. Modules fonctionnels

ModuleDescription
Gestion des agences et de la flotteCRUD des agences, des véhicules et de leurs catégories ; suivi de la disponibilité et du statut (disponible, loué, en maintenance).
Gestion des clientsInscription, mise à jour du profil, historique des réservations et des contrats.
RéservationRecherche de véhicules disponibles par ville, catégorie et période ; création, modification et annulation de réservations.
Contractualisation et paiementGénération d’un contrat à la validation d’une réservation, enregistrement des paiements (acompte, solde, pénalités).
TarificationCalcul du tarif selon la catégorie du véhicule, la durée, la période (semaine/week-end) et les équipements optionnels (GPS, siège bébé, etc.).
Tâches planifiéesLibération automatique des véhicules en fin de location, alertes de contrats arrivant à échéance, statistiques.
Reporting et qualitéStatistiques d’occupation et de chiffre d’affaires par agence, indicateurs de qualité du code et de couverture de tests.

4. Modèle de données conceptuel

Le modèle, construit progressivement à la Séance 2 (entités) et à la Séance 3 (associations), illustre les différents types d’associations et mécanismes de gestion des relations entre entités : @OneToMany, @ManyToOne, @OneToOne, @ManyToMany, ainsi que les stratégies de cascade et de fetch.

EntitéAttributs principauxAssociationType / Cascade-Fetch
Agenceid, nom, ville, adresse, telephone1 Agence vers N Vehicule ; 1 Agence vers N Employe@OneToMany, FetchType.LAZY
Vehiculeid, immatriculation, marque, modele, categorie, tarifJournalier, statutN Vehicule vers 1 Agence ; N Vehicule vers N Equipement@ManyToOne / @ManyToMany (table de jointure)
Equipementid, libelle (GPS, siège bébé, coffre de toit…)N Equipement vers N Vehicule@ManyToMany, FetchType.LAZY
Clientid, nom, prenom, email, telephone, numPermis, dateInscription1 Client vers N Reservation@OneToMany, cascade PERSIST
Employeid, nom, prenom, role (AGENT/MANAGER)N Employe vers 1 Agence@ManyToOne, FetchType.LAZY
Reservationid, dateDebut, dateFin, statutN Reservation vers 1 Client ; N Reservation vers 1 Vehicule ; 1 Reservation vers 1 Contrat@ManyToOne x2, @OneToOne
Contratid, dateSignature, montantTotal, valide1 Contrat vers 1 Reservation ; 1 Contrat vers N Paiement@OneToOne, @OneToMany cascade ALL
Paiementid, montant, datePaiement, modePaiementN Paiement vers 1 Contrat@ManyToOne, FetchType.LAZY
Maintenanceid, dateDebut, dateFin, descriptionN Maintenance vers 1 Vehicule@ManyToOne, cascade PERSIST

La relation Contrat vers Paiement en cascade ALL illustre la suppression en cascade (supprimer un contrat supprime ses paiements), tandis que Agence vers Vehicule reste volontairement sans cascade de suppression (supprimer une agence ne supprime pas ses véhicules).

5. Architecture retenue

L’application cible adopte un style architectural monolithique, structuré selon le patron en couches (Layered Architecture), avec une séparation claire des responsabilités entre les couches et plusieurs patterns de conception.

CouchePackageContenu de la solution
Présentation (API)web.controllerVehiculeController, ClientController, ReservationController, ContratController, StatistiqueController, OpenApiConfig.
Transfert (DTO)web.dtoVehiculeDTO, ReservationRequestDTO/ResponseDTO, VehiculeMapper.
Service (métier)serviceIReservationService/Impl, ITarificationService et ses stratégies.
PersistancerepositoryIVehiculeRepository, IClientRepository, IReservationRepository.
DomainedomainVehicule, Client, Reservation, CategorieVehicule, StatutVehicule.
Transverseaspect / schedulerLoggingAspect, PerformanceAspect, ContratEcheanceScheduler.

Rôle de chaque couche :

  1. Présentation (contrôleurs) : la porte d’entrée de l’application. Elle reçoit les requêtes HTTP et y répond, en manipulant des DTO plutôt que les données internes, pour ne rien exposer d’inutile ou de sensible.
  2. Métier (services) : contient les règles et la logique, par exemple gérer une réservation ou calculer un prix.
  3. Transversale (AOP) : centralise les tâches qui concernent toute l’application (logs, gestion des erreurs) plutôt que de répéter ce code partout.
  4. Domaine (objets métier) : les briques de base du métier (véhicule, réservation, client), avec leurs propres règles.
  5. Persistance (accès aux données) : sauvegarde et récupère les données sans que le reste de l’application ait besoin de savoir comment.
  6. Base de données : le stockage durable des informations, avec des règles garantissant leur cohérence.

6. Stack technique recommandée

CatégorieOutils / bibliothèques
Langage / BuildJava 17+, Maven
FrameworkSpring Boot, Spring Data JPA, Spring MVC, Spring AOP, Spring Scheduler
Base de donnéesMySQL ou PostgreSQL en développement, H2 en mémoire pour les tests
ProductivitéLombok, SLF4J/Logback, MapStruct (mapping DTO, optionnel)
Documentation APIspringdoc-openapi (Swagger UI)
QualitéSonarLint (IDE), SonarQube (optionnel, séance 13)
OutillageGit/GitHub, Postman, IntelliJ IDEA