Points d'extension
Les modules ne s'importent jamais entre eux. Pour collaborer, ils passent par les registries du core.
Pourquoi #
Coder en dur une référence d'un module à un autre (par ex. office → code) casserait l'indépendance : on ne peut pas supposer qu'un module est installé.
Les deux options #
- Vendorer le fichier nécessaire dans votre module.
- Passer par un point d'extension :
ExtensionRegistry/ModuleServiceRegistrycôté frontend.
Exemple : contrat inter-module #
// Le module calendar publie un service…
ModuleServiceRegistry.publish('calendar', {
openDate: (arg) => { /* ouvre l'agenda sur une date */ }
})
// …qu'un autre module (ex. jarvis) consomme s'il est présent
ModuleServiceRegistry.get('calendar')?.openDate('2026-06-25')Note
Découverte dynamique uniquement (DB ou registry) et appel optionnel (?.). Ne supposez jamais la présence d'un module.
Singletons partagés #
React, Radix DropdownMenu, les stores… doivent rester external et ne jamais être re-bundlés, sous peine de doublons qui cassent l'UI.