Traduction à relire. Cette version française est une traduction automatique qui n’a pas encore été relue par un locuteur natif. Elle peut contenir des tournures maladroites ou des termes techniques inexacts. En cas de doute, la version anglaise fait référence.

← Toutes les études

ÉTUDE D’ARCHITECTURE · Jointures

Où placer les frontières dans une plateforme multi-marques

Ceci est une étude de conception personnelle. Ce n'est pas un travail livré à un client, et elle ne contient aucun nom ni chiffre de client. Elle s'appuie sur le type de plateforme sur lequel je travaille chaque jour : Salesforce Commerce Cloud, avec environ une centaine de sites pour plusieurs marques et marchés. Les exemples utilisent les mécanismes de Commerce Cloud. Le raisonnement vaut pour toute grande plateforme de commerce.

Pourquoi c'est important

Un groupe avec plusieurs marques et plusieurs pays veut en général une seule plateforme, pas vingt. La question est de savoir jusqu'où chaque marque peut différer. Si l'on se trompe, soit on ne peut pas répondre à un besoin local, soit on se retrouve avec une centaine de sites séparés qui ressemblent seulement à une plateforme.

La décision — Construire chaque marque et chaque marché sur une base partagée. Ne laisser changer que le strict nécessaire, dans une fine couche au-dessus. Ne jamais modifier le code partagé lui-même.

Ce que cela apporte — Une nouvelle marque ou un nouveau marché se lance en configuration plutôt qu'en reconstruction. Un correctif partagé atteint tous les sites. La plateforme peut continuer à recevoir les mises à jour.

Le risque évité — Le parc qui se divise peu à peu en une centaine de sites sur mesure, incapables de partager un correctif ou une fonctionnalité.

En une phrase : une plateforme multi-marques est un pari sur l'endroit où le changement se produit. Placez d'un côté ce qui change rarement et se partage. Placez de l'autre ce qui varie par marque ou par marché. Une nouvelle marque devient alors un travail de configuration, et non une copie de tout le code.


Le problème

Quand une plateforme sert plusieurs marques dans plusieurs pays, le point difficile n'est pas une fonctionnalité précise. Ce sont les frontières : quel comportement est partagé et détenu par une équipe centrale, et quel comportement chaque marque ou marché a le droit de changer.

Il y a deux manières courantes de se tromper.

Le travail consiste à placer la frontière entre ces deux extrêmes.

La question qui décide de tout

Pour chaque comportement, posez une seule question : est-ce que cela varie par marque ou par marché, et qui est responsable de cette différence ?

Cette question décide de quel côté de la frontière il appartient.

Dans Commerce Cloud, cela prend la forme du chemin de cartouches. Une cartouche est un dossier de code. Le chemin de cartouches est une liste ordonnée de ces dossiers pour un site. Quand la plateforme a besoin d'un fichier, elle parcourt la liste dans l'ordre et utilise la première correspondance trouvée. Un dossier placé plus tôt peut donc remplacer un fichier d'un dossier placé plus tard. C'est ce qu'on appelle une surcharge : vous changez le comportement sans modifier le fichier d'origine.

Voici les couches. La base partagée est la plus large, car c'est là que vit l'essentiel du comportement. Chaque couche au-dessus devrait en contenir moins.

La plateforme en couches, vue comme une pyramide Une pyramide en quatre niveaux : une large base partagée, puis la marque, puis le marché, se réduisant à une fine pointe spécifique au site. socle / base partagé · change rarement marque identité · règles marché site l’essentiel du comportement la part fine et spécifique

La largeur de chaque niveau est l'essentiel : la base partagée porte la plus grande part du comportement, et chaque couche au-dessus ne contient que ce qui diffère réellement.

Le parc sur lequel je travaille comporte plus de couches que cela — global, zone, marque, pays, puis site — mais l'idée reste la même quelle que soit la profondeur. Un site est la base partagée, sauf si une couche marque change quelque chose, sauf si une couche marché change cela, sauf si le site lui-même le fait. L'essentiel d'un site vient de la base partagée. Plus on monte, moins il devrait y avoir de choses.

La conception : partager la base, la surcharger, ne jamais la modifier

Deux règles font l'essentiel du travail.

Premièrement, ne pas toucher au code partagé. Le code de base de la plateforme, et tout code acheté à un partenaire, n'est jamais modifié directement. Si vous le modifiez, vous ne pourrez pas prendre la mise à jour suivante sans perdre vos changements. En quelques années, c'est ainsi qu'une plateforme devient impossible à mettre à jour.

Deuxièmement, placer les différences dans de fines couches au-dessus. Une couche marque ou marché se place plus tôt dans le chemin de cartouches et ne remplace que les fichiers qui diffèrent réellement. Commerce Cloud offre des moyens sûrs de le faire : vous pouvez appeler la version d'origine d'un fichier depuis votre propre version et l'enrichir, au lieu de la copier entièrement.

La même frontière traverse les données, pas seulement le code :

Le principe est identique dans les deux cas. Nommez ce qui est stable et partagez-le. Gardez ce qui varie de l'autre côté de la frontière, où cela ne peut casser personne.

Le jugement réellement nécessaire : savoir quand une marque a cessé d'être une variante et est devenue un produit à part. Si les changements d'une marque dépassent le comportement partagé sur lequel ils reposent, ou si de la logique propre à une marque apparaît dans le socle partagé, la réponse honnête n'est pas une exception de plus. C'est de donner à cette marque sa propre frontière. Forcer deux choses très différentes à partager une base, c'est ce qui rend une plateforme lente à faire évoluer.

Options envisagées

OptionDécisionRaisonnement
Base partagée avec de fines couches marque et marchéRetenueC'est l'option la plus coûteuse en effort de conception. Il faut décider ce qui est partagé et tenir cette ligne. En retour, les marques avancent indépendamment, un nouveau marché relève surtout de la configuration, et un correctif atteint tout le monde. La base partagée reste à jour.
Copier la base pour chaque marqueRejetéeLa plus rapide pour la deuxième marque. Très coûteuse à la vingtième. Chaque correctif partagé doit être appliqué plusieurs fois, et les copies divergent.
Modifier la base partagée selon les besoins de chaque marqueRejetéeLe raccourci tentant. Cela fonctionne jusqu'à la mise à jour suivante, qu'il bloque discrètement. Les modifications manuelles du code partagé sont la principale raison pour laquelle des plateformes restent bloquées sur d'anciennes versions.
Un modèle strict sans vraie surchargeRejetéeCela paraît cohérent, mais le premier marché avec un besoin légal ou commercial réel impose une exception. La rigidité n'empêche pas les différences. Elle les rend seulement invisibles.
Une interface distincte par marqueRejetée dans ce contexteDonne le plus de liberté à chaque équipe. On le paie en reconstruisant pour chaque marque les sujets communs : connexion, paiement, consentement. Pertinent quand les marques sont réellement des produits différents. Inadapté quand ce sont des variantes d'un même produit.

Les options rejetées échouent pour la même raison de fond. Elles évitent de décider où la différence est permise, donc la différence apparaît quand même, à des endroits que personne n'avait prévus.

Ce que je surveillerais en production

Ce que cela apporte

Le mécanisme n'est pas le point intéressant. Le point intéressant est l'endroit où l'on trace la ligne, et la discipline de garder des choses réellement différentes de part et d'autre.


Décisions liées : ADR-04 (utiliser des contrats d'API versionnés plutôt qu'une base de données partagée) applique la même idée à l'intégration des systèmes : refuser la dépendance cachée et payer le coût d'une interface claire. ADR-03 (traiter les événements de commande après le paiement) trace une autre frontière, cette fois dans le temps plutôt que dans la structure.