Shared Kernel et contrats

Quels éléments il convient de partager entre dépôts et services, et comment éviter que ce qui est partagé ne devienne une source de couplage.

Qu’est-ce qu’un Shared Kernel ?

C’est un petit ensemble de concepts partagés entre plusieurs parties du système.

Il peut inclure :

  • des value objects très stables
  • des contrats techniques minimaux
  • des utilitaires réellement transverses
  • des types communs

Ce qu’il convient de partager

  • UUID
  • Email
  • Money
  • des interfaces techniques très stables
  • certains événements ou contrats bien gouvernés

Ce qu’il ne convient pas trop de partager

  • les modèles complets du domaine
  • les DTOs qui changent fréquemment
  • la logique métier
  • les structures qui obligent tout le monde à versionner en même temps

Risque principal

Si le shared kernel grandit sans contrôle, il devient une dépendance globale qui :

  • couple les équipes
  • oblige à coordonner les releases
  • rend difficile l’évolution indépendante

Contrats explicites

Au-delà du shared kernel, l’important est qu’il existe des contrats clairs entre les composants :

  • APIs
  • événements
  • interfaces
  • schemas

Partager ne devrait pas signifier mélanger les contextes.

Résumé

Un petit shared kernel peut aider. Un grand recrée souvent le problème que vous tentiez d’éviter : le couplage.