MFormations
Modern Design Patterns

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.