ACL

L'Anti-Corruption Layer protège le domaine face aux systèmes externes, aux modèles legacy et aux contrats qui ne devraient pas s'infiltrer dans le cœur métier.

Qu’est-ce qu’une ACL ?

ACL signifie Anti-Corruption Layer. C’est une couche ou un patron qui empêche les concepts, les modèles et les limitations des systèmes externes de contaminer notre domaine interne.

Pourquoi en a-t-on besoin ?

Parce que les systèmes externes :

  • ont souvent des modèles différents
  • sont parfois mal conçus
  • peuvent utiliser des noms incohérents
  • peuvent imposer des règles techniques que nous ne voulons pas propager

Si ces modèles pénètrent directement dans le domaine, nous finissons par adapter notre système à des décisions qui ne sont pas les nôtres.

Responsabilités principales

  • Encapsuler les adaptateurs externes
  • Traduire les modèles
  • Isoler les dépendances tierces
  • Appliquer des retries et des circuit breakers
  • Gérer les particularités techniques externes

Cas typiques

  • Intégration avec Stripe ou un fournisseur de paiement
  • Connexion avec un ERP legacy
  • Service d’email externe
  • Fournisseurs de shipping
  • Anciens systèmes avec des modèles incompatibles

Ce qu’elle protège exactement

Elle protège :

  • le langage du domaine
  • la façon de modéliser les entités
  • la cohérence conceptuelle
  • les règles internes du métier

ACL centrale vs ACL par domaine

Parfois, l’ACL est implémentée comme un service ou un dépôt central. D’autres fois, elle est implémentée par domaine ou par intégration spécifique.

Il n’existe pas de réponse unique et correcte. L’important est de ne pas créer un « monolithe d’intégrations » sans ownership clair.

Exemple pratique

Supposons que l’ERP externe utilise :

  • des noms de champs déroutants
  • des formats de date étranges
  • des états incompatibles avec le domaine

L’ACL reçoit ces données, les traduit et livre au domaine un modèle compréhensible et cohérent.

Résumé

L’ACL évite que le domaine ne se déforme pour s’adapter aux systèmes externes. C’est une couche de protection, de traduction et de résilience.