Dans les systèmes basés sur des commandes et/ou des événements (CQRS, CQS,
Event Sourcing, architecture event-driven), on retrouve parfois des messages
“CRUD-like” tels que UpdateUserStatus ou UserStatusUpdated.
Ces classes sont généralement une mauvaise abstraction. Il vaut mieux privilégier
des messages explicites comme CloseUserAccount ou UserAccountClosed.
Pourquoi ?
Parce qu’une sémantique explicite améliore la compréhension du système. Avec des
messages génériques, il faut analyser leur contenu pour comprendre l’intention
réelle et déterminer la réaction appropriée. On finit souvent par déléguer vers
différentes méthodes en fonction des données du message.
Dans un système event-sourced, des événements spécifiques ont l'avantage de
rendre l’historique plus lisible : on comprend clairement ce qui s’est produit et quelles réactions chaque événement déclenche.
// À éviter
handle(cmd: UpdateUserStatus) {
if (cmd.status === "Closed") {
closeAccount(cmd);
} else {
throw new Error(
"Unsupported update. [Status=" + cmd.status + "]"
);
}
}
// Préférable
handle(cmd: CloseUserAccount) {
// …
}
Le contre-argument le plus fréquent est que cette approche multiplie le nombre
de messages. C’est vrai. Mais quel est le problème ?
Une classe supplémentaire n’aura aucun impact significatif sur les performances
du système. En revanche, elle améliorera fortement sa lisibilité, sa
maintenabilité et son explicitation métier.
Mon dernier point concerne la documentation du système. Cartographier les
messages (qui produit ou consomme quoi) est déjà complexe. Si, en plus, il faut
analyser le contenu de chaque message, ça devient presque impossible.
United States
NORTH AMERICA
Related News
What Does "Building in Public" Actually Mean in 2026?
20h ago
The Agentic Headless Backend: What Vibe Coders Still Need After the UI Is Done
20h ago
Why I’m Still Learning to Code Even With AI
22h ago
I gave Claude a persistent memory for $0/month using Cloudflare
1d ago
NYT: 'Meta's Embrace of AI Is Making Its Employees Miserable'
1d ago