Devmind.
Menu

Apprendre, à votre rythme

Tous les cursus sont accessibles sans compte.

Chapitre 8 / Notion

Structure : Adapter, Façade, Decorator

Le code neuf rencontre du code vieux (API bizarre, lib capricieuse, service externe).

◷ 11 minutesTravail sur votre machine

Prérequis : cours 1.3 et 2.1.

Pourquoi

Le code neuf rencontre du code vieux (API bizarre, lib capricieuse, service externe). Ces trois patterns sont des interfaces de traduction : ils évitent de contaminer ton domaine avec les bizarreries du dehors.

Concepts

  • Adapter : convertit une interface en une autre (StripeWebhook → PaymentEvent métier). Le domaine ne voit jamais Stripe : changer de prestataire = changer d'adapter.
  • Façade : simplifie un sous-système complexe derrière UNE entrée claire (Billing.charge(order) qui orchestre TVA, remise, facture, paiement). Les détails restent dedans.
  • Decorator : ajoute un comportement en enveloppant (logs, cache, retry autour d'un appel) sans toucher au code d'origine. Empilable : retry(cache(log(api))).

Exemple : décorer sans toucher

const withRetry = (fn, n = 3) => async (...a) => {
  for (let i = 0; i < n; i++) try { return await fn(...a); } catch (e) { if (i === n - 1) throw e; }
};
const robustFetch = withRetry(fetchJson);

Cas réel

Prestataire SMS qui change son API (v1 → v2, champs renommés) : sans adapter, 14 fichiers touchés ; avec, un seul. La migration a pris une heure au lieu d'une semaine — et le prochain changement coûtera pareil.

Pièges

  • Adapter qui fuit (types du prestataire dans le domaine) : l'abstraction est percée, le changement coûtera quand même.
  • Façade-dieu : 40 méthodes = nouveau fourre-tout. Une façade par usage cohérent.
  • Decorators empilés à l'aveugle : l'ordre compte (retry autour du cache ou l'inverse ?) — à penser, pas à empiler.

À retenir

Adapter = traduire le dehors, Façade = simplifier le dedans, Decorator = envelopper sans toucher.

Pas de correction en ligneConfrontez votre code aux résultats attendus du cours.