Chapitre 19
19. QCM - Design Patterns
19. QCM - Design Patterns
100 QCM - Design Patterns (avec réponses et explications)
SOLID (8 questions)
Q1 - Single Responsibility Principle
Quel principe SOLID dit qu'une classe ne doit avoir qu'une seule raison de changer ? A) Open/Closed B) Liskov Substitution C) Single Responsibility D) Dependency Inversion
Réponse : C - SRP stipule qu'une classe doit avoir une seule responsabilité, donc une seule raison de changer.
Q2 - Open/Closed Principle
Que signifie "ouvert à l'extension, fermé à la modification" ? A) On ne peut pas modifier la classe mais on peut l'étendre B) On peut ajouter des comportements sans modifier le code existant C) La classe est sealed D) On utilise des interfaces
Réponse : B - OCP encourage l'extension via héritage/composition sans altérer le code existant.
Q3 - Liskov Substitution
Si B hérite de A, que doit-on pouvoir faire ? A) Utiliser B partout où A est utilisé sans changer le comportement attendu B) B doit surcharger toutes les méthodes de A C) B ne peut pas ajouter de nouvelles méthodes D) A et B doivent être abstraits
Réponse : A - LSP : les sous-types doivent être substituables à leurs types de base.
Q4 - Interface Segregation
Que recommande ISP ? A) Une interface par classe B) Des interfaces spécifiques plutôt qu'une interface générale C) Toutes les méthodes dans une seule interface D) Éviter les interfaces
Réponse : B - ISP : plusieurs interfaces spécifiques valent mieux qu'une seule interface "polluée".
Q5 - Dependency Inversion
Quel est le principe DIP ? A) Dépendre des implémentations concrètes B) Dépendre des abstractions, pas des concrétions C) Utiliser l'injection de dépendances uniquement D) Éviter les dépendances
Réponse : B - Les modules de haut niveau ne doivent pas dépendre des modules de bas niveau.
Q6 - SOLID acronym
Que signifie le S dans SOLID ? A) Stable B) Single Responsibility C) Simple D) Structured
Réponse : B
Q7 - OCP Exemple
Lequel respecte OCP ? A) if/else pour chaque nouveau type B) Interface + implémentations séparées C) Modification de la classe existante D) switch avec tous les cas
Réponse : B - Les nouvelles implémentations ajoutent des classes sans modifier l'existante.
Q8 - DIP vs DI
DIP est différent de Dependency Injection ? A) Oui, DIP est un principe, DI est une technique B) Non, c'est la même chose C) DI est un principe, DIP est une technique D) Ils sont indépendants
Réponse : A - DIP (principe) guide l'architecture, DI (technique) implémente le principe.
Création (15 questions)
Q9 - Singleton
Quel problème résout le Singleton ? A) Création multi-thread B) Instance unique d'une classe C) Construction complexe D) Familles d'objets
Réponse : B - Garantit une seule instance avec un point d'accès global.
Q10 - Factory Method
Quel est l'avantage de Factory Method ? A) Instance unique B) Découpler la création de l'utilisation C) Construire des objets complexes D) Partager des instances
Réponse : B - Les sous-classes décident quelle classe instancier.
Q11 - Abstract Factory
Abstract Factory est différent de Factory Method car : A) Il crée des familles d'objets B) Il utilise une interface C) Il est plus simple D) Il utilise des classes abstraites
Réponse : A - Abstract Factory crée des familles d'objets, Factory Method crée un seul objet.
Q12 - Builder
Quand utiliser Builder plutôt que Factory ? A) Construction simple B) Objet avec de nombreux paramètres optionnels C) Instance unique D) Familles d'objets
Réponse : B - Builder excelle quand un objet a beaucoup de paramètres optionnels.
Q13 - Prototype
Comment crée-t-on un nouvel objet avec Prototype ? A) Avec new B) En clonant un objet existant C) Avec une factory D) Avec un builder
Réponse : B - Le Prototype crée des objets par clonage d'un prototype existant.
Q14 - Singleton Thread-Safe
Le Singleton de base est-il thread-safe ? A) Oui B) Non C) Seulement en Java D) Dépend du compilateur
Réponse : B - Sans synchronisation, deux threads peuvent créer deux instances.
Q15 - Factory Method vs Simple Factory
Quelle est la différence ? A) Factory Method est un pattern, Simple Factory est un idiome B) C'est la même chose C) Simple Factory utilise des interfaces D) Factory Method est plus simple
Réponse : A - Factory Method (pattern GoF) utilise le polymorphisme, Simple Factory (idiome) centralise la création.
Q16 - Abstract Factory Exemple
Lequel est un exemple d'Abstract Factory ? A) DatabaseFactory.createConnection() B) GUIFactory.createButton() + createCheckbox() C) LoggerFactory.createLogger() D) UserFactory.createUser()
Réponse : B - Crée une famille de composants GUI (Button, Checkbox, etc.).
Q17 - Builder fluent
Qu'apporte le fluent interface au Builder ? A) Meilleures performances B) API plus lisible (chaînage) C) Thread-safety D) Moins de code
Réponse : B - Retourner this permet le chaînage : builder.setA().setB().build().
Q18 - Prototype vs Copy
Quel est l'avantage de Prototype sur une copie manuelle ? A) Plus rapide B) Gère automatiquement les références profondes C) Polymorphisme D) Sérialisation automatique
Réponse : B - Le clone peut gérer la copie profonde (deep copy) automatiquement.
Q19 - Singleton usage
Quand éviter le Singleton ? A) Configuration globale B) Pool de connexions C) Quand on veut des tests unitaires isolés D) Logger
Réponse : C - Le Singleton rend les tests difficiles (état global partagé).
Q20 - Builder vs Factory
Quel pattern choisir pour un objet avec 15 paramètres optionnels ? A) Singleton B) Factory Method C) Builder D) Prototype
Réponse : C - Le Builder gère bien les nombreux paramètres optionnels.
Q21 - Factory Method structure
Quelle classe contient la factory method ? A) Creator (classe abstraite ou interface) B) Product (objet créé) C) ConcreteProduct (implémentation) D) Client
Réponse : A - Le Creator déclare la factory method que les ConcreteCreator implémentent.
Q22 - Abstract Factory participants
Quels sont les 4 participants de l'Abstract Factory ? A) Factory, Product, Client, Config B) AbstractFactory, ConcreteFactory, AbstractProduct, ConcreteProduct C) Creator, Product, Client, Factory D) Factory, Builder, Prototype, Singleton
Réponse : B
Q23 - Prototype Registry
Qu'est-ce qu'un Prototype Registry ? A) Un registre de singletons B) Un catalogue de prototypes prêts à être clonés C) Une factory de prototypes D) Un builder de prototypes
Réponse : B - Stocke et gère les prototypes disponibles pour clonage.
Structure (15 questions)
Q24 - Adapter
Quel est le rôle de l'Adapter ? A) Ajouter des fonctionnalités dynamiquement B) Faire collaborer des interfaces incompatibles C) Simplifier une interface complexe D) Créer une arborescence
Réponse : B - L'Adapter convertit une interface en une autre attendue par le client.
Q25 - Adapter vs Bridge
Différence entre Adapter et Bridge ? A) Adapter fait fonctionner des interfaces existantes, Bridge sépare abstraction et implémentation B) C'est la même chose C) Bridge est plus simple D) Adapter utilise l'héritage
Réponse : A
Q26 - Decorator
Quelle est la caractéristique du Decorator ? A) Crée une arborescence B) Ajoute des responsabilités dynamiquement C) Cache l'accès D) Convertit une interface
Réponse : B - Le Decorator enveloppe un objet pour lui ajouter des fonctionnalités.
Q27 - Decorator vs Proxy
Le Proxy crée une représentation, le Decorator : A) Ajoute des fonctionnalités B) Contrôle l'accès C) Cache l'objet réel D) Crée un objet distant
Réponse : A - Le Proxy contrôle l'accès, le Decorator ajoute des comportements.
Q28 - Composite
Quel pattern permet de traiter uniformément des objets individuels et composés ? A) Adapter B) Decorator C) Composite D) Facade
Réponse : C - Composite permet de manipuler des objets individuels ET des compositions de la même façon.
Q29 - Facade
Quelle est la fonction d'une Facade ? A) Ajouter des fonctionnalités B) Fournir une interface simplifiée à un sous-système C) Créer des objets D) Gérer les transitions d'état
Réponse : B - La Facade masque la complexité d'un sous-système derrière une interface simple.
Q30 - Flyweight
Quel problème résout Flyweight ? A) Interfaces incompatibles B) Partage d'objets pour économiser la mémoire C) Arborescences complexes D) Ajout de fonctionnalités
Réponse : B - Flyweight partage des parties intrinsèques d'objets pour économiser la mémoire.
Q31 - Proxy types
Citez 3 types de Proxy : A) Virtual, Protection, Remote B) Simple, Complex, Middle C) Static, Dynamic, Generic D) Local, Global, Shared
Réponse : A
Q32 - Adapter Class vs Object
Quelle est la différence entre Adapter classe et objet ? A) Classe utilise héritage, Objet utilise composition B) Classe est plus flexible C) Objet est plus simple D) Aucune différence
Réponse : A - L'Adapter classe hérite du Adaptee, l'Adapter objet le compose.
Q33 - Decorator vs Composite
Le Decorator a un seul enfant, le Composite en a : A) Un seul aussi B) Plusieurs C) Aucun D) Zéro ou un
Réponse : B - Composite gère plusieurs enfants, Decorator enveloppe un seul composant.
Q34 - Bridge structure
Quels sont les 4 éléments du Bridge ? A) Abstraction, RefinedAbstraction, Implementor, ConcreteImplementor B) Client, Adapter, Adaptee, Target C) Component, Leaf, Composite, Client D) Subject, Observer, Event, Handler
Réponse : A
Q35 - Facade vs Mediator
Différence entre Facade et Mediator ? A) Facade simplifie un sous-système, Mediator coordonne des objets B) C'est la même chose C) Mediator est structurel, Facade est comportemental D) Facade est comportemental
Réponse : A - Facade (structurel) donne une vue simplifiée, Mediator (comportemental) centralise les communications.
Q36 - Adapter bidirectionnel
Un Adapter peut-il fonctionner dans les deux sens ? A) Oui, un Two-Way Adapter B) Non C) Seulement en Java D) Avec des interfaces
Réponse : A - L'Adapter bidirectionnel convertit dans les deux sens.
Q37 - Proxy Protection
Le Proxy Protection sert à : A) Reporter le chargement B) Contrôler les accès C) Gérer la distance réseau D) Compter les références
Réponse : B - Vérifie les droits d'accès avant de déléguer à l'objet réel.
Q38 - Decorator Pattern
Quel principe SOLID est particulièrement bien illustré par le Decorator ? A) SRP B) OCP (ouvert à l'extension) C) LSP D) ISP
Réponse : B - On ajoute des décorateurs sans modifier les composants existants.
Comportement (18 questions)
Q39 - Strategy
Quel est l'avantage de Strategy par rapport aux if/else ? A) Plus simple à écrire B) Les algorithmes sont interchangeables et isolés C) Plus rapide D) Utilise moins de mémoire
Réponse : B - Strategy encapsule chaque algorithme dans sa propre classe, les rendant interchangeables.
Q40 - Observer
Quelle est la relation entre Subject et Observer ? A) 1 Subject → N Observateurs B) N Subjects → 1 Observateur C) 1-1 D) N-N
Réponse : A - Un sujet notifie plusieurs observateurs.
Q41 - Command
Qu'est-ce que le pattern Command encapsule ? A) Un état B) Une requête en tant qu'objet C) Une interface D) Un algorithme
Réponse : B - Transforme une requête en objet, permettant paramétrage, file d'attente, undo.
Q42 - State vs Strategy
Quelle est la différence structurelle ? A) State change l'état de l'objet, Strategy change l'algorithme B) Aucune, même structure C) State utilise des classes, Strategy des interfaces D) State est plus simple
Réponse : A - Même structure, mais intention différente : état (transitions) vs algorithme (interchangeable).
Q43 - Template Method
Quel pattern définit le squelette d'un algorithme dans une méthode ? A) Strategy B) Template Method C) State D) Command
Réponse : B - Template Method définit les étapes dans une méthode finale, les sous-classes implémentent.
Q44 - Chain of Responsibility
Quand la requête est-elle traitée dans une chaîne ? A) Toujours par le premier handler B) Par le premier handler capable de la traiter C) Par tous les handlers D) Par le dernier handler
Réponse : B - Chaque handler décide de traiter ou de passer au suivant.
Q45 - Mediator
Quel problème résout Mediator ? A) Création complexe B) Communication many-to-many complexe C) Sauvegarde d'état D) Parcours de structures
Réponse : B - Centralise les communications entre objets, réduisant les dépendances.
Q46 - Memento
Quel est le but du Memento ? A) Notifier des changements B) Sauvegarder et restaurer l'état C) Parcourir des collections D) Encapsuler des algorithmes
Réponse : B - Capture et externalise l'état d'un objet sans violer l'encapsulation.
Q47 - Iterator
Pourquoi utiliser Iterator plutôt que for direct ? A) Plus rapide B) Encapsule le parcours, fonctionne avec différentes structures C) Plus simple D) Moins de code
Réponse : B - L'Iterator uniformise le parcours de collections hétérogènes.
Q48 - Visitor
Quel est l'inconvénient principal de Visitor ? A) Performance B) Ajouter un nouvel élément nécessite de modifier tous les visiteurs C) Complexité D) Mémoire
Réponse : B - L'ajout d'un nouvel élément (Element) nécessite d'ajouter une méthode visit dans tous les Visitors.
Q49 - Interpreter
Quand utilise-t-on Interpreter ? A) Pour évaluer des expressions d'un langage B) Pour parcourir des collections C) Pour notifier des changements D) Pour encapsuler des requêtes
Réponse : A - Interpreter évalue des phrases dans un langage ou une grammaire.
Q50 - Observer push vs pull
Différence entre push et pull dans Observer ? A) Push envoie les données, pull laisse l'observer récupérer B) Push est synchrone, pull asynchrone C) C'est la même chose D) Push est plus récent
Réponse : A - Push : le sujet envoie les données. Pull : l'observer les récupère.
Q51 - Command Undo
Comment implémenter l'undo avec Command ? A) Sauvegarder l'état avant chaque commande B) Stocker les commandes exécutées et les inverser C) Utiliser Memento D) Toutes ces réponses
Réponse : D - On peut combiner Command + Memento pour l'undo.
Q52 - Strategy Remplacement
Pour remplacer un if/else par Strategy, il faut : A) Créer une interface Strategy et une implémentation par cas B) Utiliser switch C) Créer une classe avec toutes les stratégies D) Utiliser des lambdas
Réponse : A
Q53 - Template Method hooks
Que sont les hooks dans Template Method ? A) Des méthodes abstraites obligatoires B) Des méthodes optionnelles avec implémentation par défaut C) Des méthodes privées D) Des constructeurs
Réponse : B - Les hooks sont des méthodes avec un comportement par défaut que les sous-classes peuvent surcharger.
Q54 - State transitions
Qui contrôle les transitions d'état dans State ? A) Le Context B) L'État lui-même C) Le Client D) Un Mediator
Réponse : B - Chaque état définit vers quels états on peut transitionner.
Q55 - Visitor Double Dispatch
Comment Visitor implémente-t-il le double dispatch ? A) Avec des if/else B) L'élément appelle accept(visitor), le visiteur appelle visit(element) C) Avec des génériques D) Avec de l'héritage
Réponse : B - accept → visit : l'opération dépend à la fois du type de l'élément et du visiteur.
Q56 - Observer synchrone
Par défaut, Observer est synchrone ou asynchrone ? A) Synchrone B) Asynchrone C) Dépend du langage D) Configurable
Réponse : A - L'appel à notify() est synchrone par défaut.
Architecture & Concurrence (12 questions)
Q57 - MVC
Quels sont les 3 composants de MVC ? A) Model, View, Controller B) Main, View, Config C) Model, Vector, Control D) Module, View, Code
Réponse : A
Q58 - MVVM
Qu'est-ce que le ViewModel dans MVVM ? A) Le modèle de vue B) Une vue multiple C) La vue modèle D) Un controlleur simplifié
Réponse : A - ViewModel expose des commandes et données pour la vue via data-binding.
Q59 - Microservices vs Monolithique
Quel pattern facilite la communication entre microservices ? A) Singleton B) API Gateway C) Factory D) Decorator
Réponse : B - API Gateway est le point d'entrée unique qui route vers les services.
Q60 - Event Sourcing
Que stocke Event Sourcing au lieu de l'état actuel ? A) Les snapshots B) La séquence d'événements C) Les logs D) Les caches
Réponse : B - Event Sourcing stocke la séquence complète des événements plutôt que l'état courant.
Q61 - CQRS
CQRS sépare : A) Les bases de données B) Les lectures et les écritures C) Les services D) Les vues
Réponse : B - Command Query Responsibility Segregation : sépare les modèles de lecture et d'écriture.
Q62 - Réentrant Lock
Qu'est-ce qu'un lock réentrant ? A) Un lock qui peut être acquis plusieurs fois par le même thread B) Un lock partagé C) Un lock distribué D) Un lock temporaire
Réponse : A
Q63 - Read-Write Lock
Avantage du Read-Write Lock sur le mutex ? A) Plus simple B) Permet lectures concurrentes sans blocage C) Plus rapide D) Utilise moins de mémoire
Réponse : B - Plusieurs threads peuvent lire simultanément, seul l'écriture bloque.
Q64 - Active Object
Le pattern Active Object découple : A) L'appel de méthode et son exécution B) Les objets et leurs états C) Les threads et les processus D) Les données et les méthodes
Réponse : A - Active Object utilise une file de requêtes pour exécuter les méthodes asynchronement.
Q65 - Thread Pool
Qu'est-ce qu'un Thread Pool ? A) Un pool de threads réutilisables B) Un pool de connexions C) Un groupe de processus D) Un cache de threads
Réponse : A - Pool de threads prêts à exécuter des tâches, évitant la création/destruction.
Q66 - Reactor vs Proactor
Le Reactor est synchrone, le Proactor est : A) Synchrone aussi B) Asynchrone C) Plus rapide D) Plus simple
Réponse : B - Reactor gère les événements synchrones, Proactor les opérations asynchrones.
Q67 - Scheduler
Quel pattern gère l'ordre d'exécution des tâches ? A) Scheduler B) Command C) Strategy D) Observer
Réponse : A - Le Scheduler ordonnance l'exécution des tâches selon des critères.
Q68 - Two-Phase Commit
Combien de phases dans 2PC ? A) 1 B) 2 (prepare + commit/abort) C) 3 D) 4
Réponse : B
React Patterns (10 questions)
Q69 - HOC définition
Qu'est-ce qu'un Higher-Order Component ? A) Un composant React plus complexe B) Une fonction qui prend un composant et retourne un composant enrichi C) Un composant avec plus de props D) Un composant parent
Réponse : B
Q70 - Hooks vs HOC
Quelle est la tendance actuelle pour la réutilisation de logique ? A) HOC B) Render Props C) Custom Hooks D) Mixins
Réponse : C - Les hooks remplacent avantageusement HOC et Render Props.
Q71 - useReducer
Quel pattern reproduit Context + useReducer ? A) MVC B) Flux/Redux C) Singleton D) Observer
Réponse : B
Q72 - Error Boundaries
Quelles erreurs un Error Boundary ne capture-t-il PAS ? A) Erreurs dans render B) Erreurs dans event handlers C) Erreurs dans getDerivedStateFromProps D) Erreurs dans componentDidMount
Réponse : B - Les event handlers nécessitent try/catch.
Q73 - Portals createPortal
Que permet createPortal ? A) Créer des portes logiques B) Rendre un composant hors du DOM parent C) Créer des routes D) Gérer les entrées utilisateur
Réponse : B
Q74 - React 19 useActionState
Que retourne useActionState ? A) [state, action] B) [state, formAction, isPending] C) [state, dispatch] D) [formAction, isPending]
Réponse : B
Q75 - useOptimistic
Quand utiliser useOptimistic ? A) Pour optimiser les renders B) Pour des mises à jour optimistes de l'UI C) Pour le chargement paresseux D) Pour la gestion d'erreurs
Réponse : B
Q76 - Suspense rôle
Quel est le but de Suspense ? A) Gérer les erreurs B) Gérer les états de chargement C) Gérer les événements D) Gérer le routing
Réponse : B
Q77 - Controlled component
Dans un composant contrôlé, où est stockée la valeur ? A) Dans le DOM B) Dans l'état React C) Dans localStorage D) Dans une variable globale
Réponse : B
Q78 - Server Components
Où s'exécute un Server Component ? A) Côté client B) Côté serveur C) Les deux D) Au build
Réponse : B
Patterns Fonctionnels (10 questions)
Q79 - Functor
Quelle méthode caractérise un Functor ? A) flatMap B) map C) reduce D) filter
Réponse : B
Q80 - Monade
Quelle méthode différencie Monade de Functor ? A) map B) flatMap (chain/bind) C) filter D) reduce
Réponse : B - flatMap permet d'éviter la double imbrication.
Q81 - Maybe
Que vaut Maybe.of(null).map(fn) ? A) fn(null) B) Nothing C) Error D) null
Réponse : B - Si la valeur est null, map n'exécute pas fn et retourne Nothing.
Q82 - Either Left/Right
Dans Either<L,R>, que représente Right ? A) L'erreur B) Le succès C) La valeur nulle D) Le type
Réponse : B - Right = succès (convention "right" = correct).
Q83 - Currying
En quoi le currying transforme-t-il une fonction ? A) N-aire → N fonctions unaires B) Synchrone → Asynchrone C) Privée → Publique D) Simple → Complexe
Réponse : A
Q84 - Composition pipe
Dans pipe(f, g, h)(x), l'ordre d'application est : A) h → g → f B) f → g → h C) f, g, h en parallèle D) Aléatoire
Réponse : B - pipe applique de gauche à droite.
Q85 - Immutabilité
Comment modifier une propriété d'un objet immuable ? A) Objet.prop = valeur B) { ...objet, prop: valeur } C) Object.assign mutable D) delete puis add
Réponse : B
Q86 - Optional
Quel problème résout Optional ? A) Performance B) Null pointer C) Typage D) Mémoire
Réponse : B
Q87 - IO Monade
Quand les effets de bord sont-ils exécutés ? A) À la création B) À l'appel de run() C) Au map D) Au flatMap
Réponse : B
Q88 - Lenses
Un Lens permet de : A) Créer des lentilles optiques B) Focus sur une partie d'une structure immuable C) Filtrer des données D) Transformer des types
Réponse : B
Patterns d'Intégration (12 questions)
Q89 - API Gateway
Rôle principal de l'API Gateway ? A) Exécuter le code métier B) Point d'entrée unique qui route les requêtes C) Stocker les données D) Gérer les sessions
Réponse : B
Q90 - BFF
Quelle est la spécificité du Backend for Frontend ? A) Un backend pour tous les fronts B) Un backend dédié par type de client C) Un frontend qui sert de backend D) Une base de données frontend
Réponse : B
Q91 - Circuit Breaker états
Quels sont les 3 états du Circuit Breaker ? A) ON, OFF, STANDBY B) CLOSED, OPEN, HALF_OPEN C) START, RUN, STOP D) LOW, MED, HIGH
Réponse : B
Q92 - Saga
Quel problème résout le pattern Saga ? A) La scalabilité B) Les transactions distribuées C) Le caching D) L'authentification
Réponse : B
Q93 - Choreography vs Orchestration
Dans Choreography, comment communiquent les services ? A) Via un orchestrateur B) Via des événements C) Via REST direct D) Via DB partagée
Réponse : B
Q94 - Strangler Fig
Quel est l'objectif du Strangler Fig ? A) Améliorer les performances B) Migrer progressivement un système legacy C) Augmenter la sécurité D) Réduire les coûts
Réponse : B
Q95 - Sidecar
Où s'exécute le Sidecar ? A) Sur un serveur distant B) Dans le même pod/hôte que l'app C) Dans un cluster séparé D) Sur le poste du dev
Réponse : B
Q96 - Anti-Corruption Layer
Que protège l'ACL ? A) Les données sensibles B) Le modèle du nouveau système contre le legacy C) Les performances réseau D) Les accès non autorisés
Réponse : B
Q97 - Domain Event
Un Domain Event capture : A) Un événement technique B) Quelque chose qui s'est passé dans le domaine métier C) Une erreur applicative D) Un log serveur
Réponse : B
Q98 - Outbox Pattern
Quel problème résout l'Outbox Pattern ? A) La performance DB B) La livraison fiable des événements C) Le stockage des logs D) L'authentification
Réponse : B
Q99 - Saga Compensation
Que se passe-t-il si une étape échoue dans une Saga ? A) Tout est annulé automatiquement B) Des actions de compensation sont exécutées C) L'erreur est ignorée D) Le système s'arrête
Réponse : B
Q100 - Outbox Transaction
Comment l'outbox garantit-elle la cohérence ? A) Même transaction que l'opération métier B) Deux transactions séparées C) Transaction distribuée D) Pas de garantie
Réponse : A - Le message outbox est sauvegardé dans la même transaction que l'opération métier.