Réponds à voix haute ou par écrit avant d’ouvrir la réponse : c’est l’effort de rappel qui fait retenir. Marque ensuite la question « Je savais » ou « À revoir », puis filtre sur « À revoir » pour la prochaine séance. Les marques restent dans ce navigateur.

Rappel actif

Restitue de mémoire, sans support.

  1. Sans regarder le cours : un style architectural répond à cinq questions fondamentales. Cite-les toutes, avec un exemple concret de réponse pour chacune.

  2. Reconstitue la chaîne qui va de l’entreprise au framework : les six étapes dans l’ordre, et la question à laquelle chacune répond.

  3. Cite les cinq fonctions de l’ESB, puis dis laquelle fait de lui un « chef d’orchestre » plutôt qu’un simple tuyau.

Distingue

Deux notions proches : dis ce qui les sépare vraiment.

  1. SOA et microservices découpent tous deux le système en services. Donne trois différences concrètes qui ne se résument pas au nombre ou à la taille des services.

  2. L’ESB et l’API Gateway sont tous deux des « intermédiaires ». Qu’est-ce qui les sépare (où ils se placent, ce qu’ils font) ?

  3. Architecture en couches (Layered) et architecture N-Tiers : les deux empilent des niveaux qui ne parlent qu’au voisin. Où est la vraie différence ? Une application Spring Boot avec Controller, Service et Repository a combien de couches et combien de tiers ?

  4. Bibliothèque ou framework : le critère n’est pas la taille de l’outil. Quel est-il ? Illustre-le avec ce qui se passe quand une requête HTTP arrive sur un @RestController.

  5. En CQRS, pourquoi le modèle d’écriture reste-t-il normalisé alors que le modèle de lecture est dénormalisé ? Qui applique les règles métier, et de quel côté ?

Explique pourquoi

Le mécanisme derrière la règle.

  1. Le cours dit qu’une mauvaise architecture « ne se voit pas immédiatement ». Pourquoi ? Appuie-toi sur les avantages et inconvénients du monolithe.

  2. Pourquoi chaque microservice a-t-il sa propre base de données ? Que perdrait-on avec une base partagée, et quel prix paie-t-on pour cette séparation ?

  3. Pourquoi le patron hexagonal fait-il définir les ports par le domaine et non par la technologie (JPA, REST) ? Que se passerait-il dans le cas inverse ?

  4. En quoi la règle « chaque couche ne dépend que de la couche immédiatement inférieure » permet-elle de tester la couche Service sans base de données réelle ?

  5. Pourquoi le cycle en V est-il courant dans l’aéronautique et l’embarqué critique, alors que ce module suit un modèle agile ?

Cas pratique

Choisis et justifie avec les critères du cours.

  1. Trois développeurs lancent le MVP d’une application de réservation, à livrer en deux mois. Quel style choisis-tu ? Justifie avec deux critères du tableau comparatif, puis cite deux signaux qui te feraient reconsidérer ce choix plus tard.

  2. Une banque possède des applications Java, .NET et un vieux système qui n’échange que par FTP. Elles doivent collaborer dans un processus « ouverture de compte » qui enchaîne quatre applications. Quel style, et quelles fonctions précises de la pièce centrale vont servir ?

  3. Un tableau de bord de ventes est consulté des milliers de fois par minute, mais les données ne changent que quelques fois par heure, et chaque écriture doit respecter des règles métier strictes. Quel patron, et quelle conséquence l’utilisateur peut-il observer juste après une mise à jour ?

  4. Dans AutoLoc, on veut stocker les véhicules dans MongoDB au lieu de MySQL, sans toucher au calcul du tarif de location. Avec le patron hexagonal, qu’est-ce qui change exactement, et qu’est-ce qui ne bouge pas ?

  5. Dans l’application de livraison, on ajoute un service « Fidélité » qui donne des points à chaque commande. Compare le travail nécessaire avec des appels directs et avec une architecture Event-Driven.

  6. Vendredi soir, le service Paiement de l’application de livraison est saturé, les autres fonctionnent normalement. Décris la réaction possible si l’application est un monolithe, puis si elle est en microservices.

Trouve l'erreur

Chaque affirmation contient au moins une faute.

  1. « Notre application est en microservices : trois modules Maven (commande, livreur, paiement) compilés ensemble dans un seul JAR, qui partagent la même base MySQL. »

  2. « Dans notre MVC, le Contrôleur calcule le prix TTC de la commande et applique la remise fidélité, puis transmet le résultat à la Vue. »

  3. « Notre architecture suit CQRS : la Query qui affiche un produit incrémente aussi son compteur de vues. »

  4. « Dans notre architecture microservices, Eureka reçoit toutes les requêtes du frontend et les redirige vers le bon service. »

  5. « Pour documenter l’architecture physique, j’ai fait un diagramme de déploiement qui montre que ReservationController dépend de ReservationService, qui dépend de ReservationRepository. »

  6. « Avec SOA, le service Facturation appelle directement le service Clients en connaissant sa structure interne, ce qui est plus rapide. »

Lis le code

Relie le code aux concepts.

  1. Quelle règle de l’architecture en couches ce code viole-t-il, de deux façons ? Comment le corriger ?

    @RestController
    public class ReservationController {
        @Autowired
        private ReservationRepository repository;
    
        @PostMapping("/reservations")
        public Reservation creer(@RequestBody Reservation r) {
            if (r.getDateFin().isBefore(r.getDateDebut())) {
                throw new IllegalArgumentException("Dates invalides");
            }
            return repository.save(r);
        }
    }
    
  2. Dans ce code, repère le domaine, le port (entrant ou sortant ?) et l’adaptateur. Que faut-il écrire pour passer à MongoDB ?

    public interface VehiculeStockage {
        void sauvegarder(Vehicule v);
        Vehicule trouver(Long id);
    }
    
    public class LocationService {
        private final VehiculeStockage stockage;
        public double tarif(Long vehiculeId, int jours) { ... }
    }
    
    @Repository
    public class JpaVehiculeStockage implements VehiculeStockage { ... }
    
  3. Ces trois annotations correspondent à quelles couches, et à quels modules Spring ? Dans quel ordre une requête les traverse-t-elle, aller et retour ?

    @Service, @RestController, @Repository

Vrai ou faux, justifie

La justification compte plus que le verdict.

  1. « En passant d’un monolithe à une architecture N-Tiers, on règle le problème de scalabilité. »

  2. « Le système d’information d’une entreprise, c’est l’ensemble de ses logiciels et serveurs. »

  3. « Choisir Spring Boot est la première décision d’architecture d’un projet. »

  4. « Event-Driven est un patron de communication, au même titre que Publish/Subscribe. »

  5. « Avec MVC, on peut ajouter une application mobile à côté du site web sans toucher au Modèle. »

  6. « En microservices, une panne d’un service ne peut jamais affecter les autres. »

Classe

Range chaque élément et explique les cas limites.

  1. Range chaque élément du côté logique ou physique : @Service, Tomcat :8080, diagramme de packages, MySQL :3306, couche persistance, Nginx :4200, JDBC/TCP-IP, diagramme de déploiement.

  2. Range ces six patrons dans leur famille (structurel, communication, traitement), en donnant pour chaque famille la question à laquelle elle répond : Hexagonal, Publish/Subscribe, CQRS, API Gateway, Couches, MVC.

  3. Style ou patron ? Microservices, MVC, SOA, CQRS, Event-Driven, Hexagonal, Monolithique, API Gateway. Pour les cas qui prêtent à confusion, explique.

  4. Associe chaque framework à sa description : Spring, Jakarta EE, Quarkus, Micronaut. (a) spécifications standardisées, plusieurs implémentations ; (b) créé par Red Hat, compilation native GraalVM ; (c) alternative légère à J2EE / EJB, créé en 2003 ; (d) JVM, supporte Java, Groovy et Kotlin.

Et si...

Prévois la conséquence.

  1. Et si un bug provoque une fuite mémoire dans le module Livreurs ? Compare l’impact dans un monolithe et en microservices.

  2. Et si, dans une architecture Event-Driven, le service d’envoi d’email est en panne au moment où CommandePassée est publié ? Que deviennent la commande et les autres consommateurs ?

  3. Et si on ajoute un tier de plus entre le frontend et le backend (par exemple un proxy) dans l’architecture N-Tiers ? Quel avantage espère-t-on, et quel inconvénient le cours annonce-t-il ?