Aller au contenu
Filtrer les règles par style d’implémentation

Glossaire ​

Alveolus est écrit en français. Les termes techniques et ceux de la littérature (Domain-Driven Design, architecture hexagonale, CQRS…) restent en anglais : ce sont les mots que l’on retrouve dans le code, les livres et les revues de code. Cette page fixe la liste de ces termes et la façon de les écrire.

Conventions ​

SujetConventionExemple
CasseEn minuscules dans la prose, sans italique, comme un mot français. Majuscules pour les sigles et pour Unit of Work.« l’aggregate protège ses invariants »
GenreCelui que donne la colonne Genre des tableaux ci-dessous.un aggregate, un outbox, une entity
PlurielLe pluriel anglais.des entities, des repositories, des value objects
ÉlisionComme en français, devant une voyelle prononcée.l’aggregate, l’outbox, le Unit of Work
AdjectifsLes adjectifs anglais sont invariables et suivent le nom.un bounded context upstream, des bounded contexts downstream, un adapter driving
Termes composésJamais traduits à moitié.un domain service, pas « un service de domaine »
Termes du métier de développeurLe mot qu’un développeur emploie en revue de code reste en anglais, et entre dans ce glossaire. Jamais de périphrase française.un trigger, pas « un déclencheur » ; la validation des DTO, pas « les vérifications de forme »
Bounded contextToujours écrit en entier, jamais abrégé en « contexte ».« chaque bounded context a son glossaire »
CodeEn police de code uniquement ce qui est écrit dans le code : un dossier, un type, un fichier, un mot-clé.domain est le dossier, « le domaine » est le métier ; Result, *.command.ts, waiver
TypographieApostrophe typographique (’), guillemets français (« »), espace simple avant : ; ? !.« Ce que la règle refuse : … »
FrontmatterLes clés, les codes de règle et les valeurs (blocking, tactical, to-review…) ne changent pas. title et group sont traduits.title: Une transaction ne modifie qu’une instance d’aggregate

Sections d’une règle ​

AnglaisFrançais
SignalSignal
WhyPourquoi
ExceptionsExceptions
FixCorrection
AdaptationAdaptation
Our choiceNotre choix
RelatedVoir aussi
ExampleExemple

Termes gardés en anglais ​

Conception stratégique ​

TermeGenreSens
problem spacem.L’activité telle qu’elle est, avant tout logiciel : là où vivent les subdomains.
solution spacem.Ce que l’on construit pour répondre au problem space : là où vivent les bounded contexts.
bounded contextm.La frontière dans laquelle un modèle et son langage s’appliquent, avec un seul sens par terme.
subdomainm.Une part de l’activité : core, supporting ou generic.
core, supporting, genericadj.Le subdomain qui distingue l’entreprise, celui qui la sert sans la distinguer, celui que tout le monde a.
ubiquitous languagem.Le langage commun à l’équipe et aux experts métier dans un bounded context, jusque dans le code.
context mapf.La carte des bounded contexts et de leurs relations.
patternm.La forme que prend un côté d’une relation entre bounded contexts : open host service, anticorruption layer…
upstream, downstreamadj.Le bounded context upstream influence le bounded context downstream, qui dépend de lui.
open host servicem.Le protocole qu’un bounded context upstream ouvre à tous ses clients.
published languagem.Le langage documenté des échanges entre bounded contexts.
anticorruption layerf.La couche d’un bounded context downstream qui traduit le modèle d’un autre bounded context dans le sien.
conformistadj.Se dit d’un bounded context downstream qui reprend le modèle upstream tel quel.
customer-supplierf.Une relation où le bounded context downstream pèse sur les priorités du bounded context upstream.
partnershipm.Deux équipes qui réussissent ou échouent ensemble, et coordonnent leurs changements.
shared kernelm.Une part du modèle partagée par deux équipes, qui la changent ensemble.
separate waysf.Une relation sans intégration : chaque bounded context fait sans l’autre.
segregated corem.Le core isolé dans ses propres modules, à l’écart des concepts d’autres subdomains : une étape vers un bounded context séparé.
big ball of mudm.Une zone sans frontière claire, que l’on contient au lieu de la modéliser.

Logique du domaine ​

TermeGenreSens
entityf.Un objet défini par une identité stable, qui change au fil du temps.
value objectm.Une valeur immuable, comparée par son contenu, qui porte sa propre logique.
aggregatem.Un groupe d’objets modifié d’un bloc, dans une transaction, autour de vrais invariants.
aggregate rootm.L’entity par laquelle on accède à l’aggregate et qui garde ses invariants.
domain eventm.Un fait métier passé, né dans le modèle et nommé dans le langage.
domain servicem.Une opération métier sans état, qui n’appartient à aucun objet.
factoryf.Ce qui crée un objet du modèle quand un constructeur ne suffit pas.
factory methodf.Une méthode qui crée un objet du modèle, sur sa classe ou sur un autre aggregate.
repositorym.La collection d’aggregates entiers, chargés et enregistrés dans la transaction du use case.
transaction scriptm.Une procédure par use case, dans une transaction, pour les bounded contexts supporting et generic.
code smellm.Un indice dans le code qui laisse soupçonner un problème de conception, sans le prouver.
anti-patternm.Une solution répandue qui crée plus de problèmes qu’elle n’en résout.
Smart UIf.L’anti-pattern qui met les décisions métier dans l’interface.
DAOm.Data Access Object : un objet qui lit et écrit une table, opération par opération.
Table Data Gatewaym.Le pattern où un objet donne accès à toutes les lignes d’une table.
Active Recordm.Le pattern où un objet porte à la fois ses données, ses requêtes et son enregistrement en base.
self-encapsulationf.L’habitude de passer par ses propres méthodes privées pour lire ou écrire ses champs, afin d’y placer les vérifications.
design by contractm.Une méthode décrite par ses préconditions, ses postconditions et ses invariants, vérifiés à chaque appel.
anemic modelm.Un modèle fait de données sans comportement, dont les règles vivent ailleurs.
eventual consistencyf.Une cohérence atteinte après coup, entre transactions, plutôt que dans la même transaction.
Statem.Le pattern où un objet confie son comportement à un objet qui représente son état du moment.
specificationf.Un prédicat métier nommé, que l’on combine et réutilise.
strategyf.Un algorithme isolé dans sa classe, que l’on peut remplacer par un autre sans toucher à l’appelant.
policyf.Une règle métier isolée dans sa classe, que le modèle consulte.

Architecture et placement ​

TermeGenreSens
portm.L’interface que le domaine ou l’application déclare, et qu’un adapter implémente.
adapterm.Le code qui relie un port à une technologie.
driving, drivenadj.Un adapter driving appelle l’application (HTTP, CLI, messages reçus) ; un adapter driven est appelé par elle (base de données, messages émis).
ports and adaptersm.L’autre nom de l’architecture hexagonale.
use casem.Une opération demandée à l’application : une command ou une query en style tactique, une méthode d’un application service en transaction scripts.
application servicem.En transaction scripts, la classe de application qui regroupe les use cases d’un concept, une méthode publique par use case. À ne pas confondre avec un domain service.
commandf.Un use case qui modifie des aggregates, dans une transaction.
queryf.Un use case qui lit des views sans rien modifier.
handlerm.La classe qui exécute une command ou une query (command handler, query handler).
command busm.Le composant qui achemine une command jusqu’à son handler, souvent de façon asynchrone.
containerm.Le conteneur d’injection de dépendances de NestJS, qui construit les providers et les fournit.
injection tokenm.La clé par laquelle NestJS retrouve ce qu’il doit injecter.
providerm.Une classe que NestJS instancie et injecte, déclarée dans un module.
factory providerm.Un provider que NestJS obtient en appelant une fonction, avec les dépendances qu’on lui liste.
controllerm.La classe NestJS qui reçoit une requête HTTP et appelle un use case : un adapter driving.
pipem.La classe NestJS qui valide ou transforme une entrée avant qu’elle n’atteigne le controller.
guardm.La classe NestJS qui décide si une requête peut atteindre le controller.
filterm.La classe NestJS qui transforme une exception en réponse HTTP.
interceptorm.La classe NestJS qui s’exécute autour de l’appel d’un controller, avant et après.
viewf.Une lecture préparée pour une query, lue à travers un view port.
read modelm.Un modèle de lecture séparé du modèle d’écriture, en CQRS.
CRUDm.Créer, lire, mettre à jour, supprimer : des opérations sur des données, sans règle métier.
CQRSm.La séparation des modèles d’écriture et de lecture.
event sourcingm.L’état d’un aggregate reconstitué à partir de ses events.
commitm.La validation d’une transaction, qui rend ses écritures définitives.
Unit of Workm.La transaction d’un use case, que les repositories et l’outbox partagent.
optimistic concurrencyf.Une écriture qui échoue si la version de l’aggregate a changé depuis sa lecture, sans verrou posé à l’avance.
versioningm.Le numéro de version qu’un aggregate porte en base, et qui avance à chaque écriture.
outboxm.La table où les events sont enregistrés dans la transaction, avant d’être publiés.
at least onceadj.Se dit d’une livraison qui garantit qu’un message arrive, quitte à l’envoyer deux fois.
forwarderm.La classe de l’application qui lit l’outbox et publie ses messages, dans l’ordre.
relaym.L’adapter driving qui déclenche le forwarder à intervalle régulier.
mappingm.La correspondance entre deux représentations d’une même donnée, par exemple une ligne et un objet.
wrapperm.Une classe qui en enveloppe une autre, ou une ligne, sans rien y ajouter d’essentiel.
breaking changem.Un changement d’un contrat qui casse ceux qui l’utilisent.
finderm.Une méthode de repository qui cherche des objets selon un critère.
mapperm.La classe qui traduit une ligne de base en objet du modèle, et l’inverse.
translatorm.La classe d’une anticorruption layer qui traduit un modèle étranger.
endpointm.Une route d’une API, qu’un adapter driving expose.
media typem.Le format déclaré d’un contenu échangé en HTTP, comme application/json.
facadef.Le point d’entrée qu’un bounded context publie aux autres dans le même processus.
flagm.Un champ booléen qui marque un état ou active un comportement (flag_blocked).
DTOm.Un objet de données sans comportement, pour un transport.
payloadm.Des données venues de l’extérieur, à valider avant usage.
wiringm.L’assemblage des objets d’un bounded context par son module.
composition rootf.Le seul endroit qui assemble l’application.
refactoringm.Une transformation du code qui change sa structure sans changer son comportement.
deployment unitf.Ce que l’on déploie d’un bloc : un service, une fonction, un job.
getter, setterm.Une méthode ou une propriété qui lit, ou écrit, un champ de l’objet depuis l’extérieur.
decoratorm.Une fonction appliquée avec @ à une classe, une méthode ou une propriété (@Injectable).
double dispatchm.Un objet qui reçoit en paramètre celui à qui il confie une partie du travail.
mediatorm.Un objet que le client passe à l’aggregate pour qu’il y publie son état, sans montrer sa structure.
presenter, assemblerm.La classe d’un adapter driving qui met en forme ce qu’un écran ou une réponse affiche.
presentation modelm.Un modèle propre à un écran, que l’adapter de présentation tire de l’état du domaine.
I/Of. pl.Les entrées-sorties : un accès à la base, au réseau ou aux fichiers.
idm.L’identifiant technique d’une ligne en base, propre à la persistance, distinct de l’identité métier.
branded typem.Un type primitif marqué pour que le compilateur ne le confonde pas avec un autre (TransferId, pas string).
batchm.Un traitement qui porte sur plusieurs éléments d’un coup.
allowlistf.La liste des cas qu’un contrôle laisse passer.
logm.Une ligne qu’une application écrit pour garder trace de ce qu’elle fait.
singletonm.Une classe qui n’a qu’une instance, partagée par toute l’application.
service locatorm.Un objet global auquel une classe demande ses dépendances, au lieu de les recevoir.
PascalCasem.L’écriture où chaque mot commence par une majuscule, sans séparateur : DebitWalletHandler.
kebab-casem.L’écriture en minuscules, les mots séparés par des tirets : debit-wallet.
snake_casem.L’écriture en minuscules, les mots séparés par des tirets bas : holder_id.
parsingm.La lecture d’un texte brut pour en tirer une valeur typée, ou le refuser.
tokenm.Une chaîne qui prouve un droit d’accès, et qui doit rester secrète.
helperm.Une petite fonction ou méthode d’appoint, au service du code qui l’appelle.
schedulerm.Ce qui lance un traitement à une heure ou à un intervalle donnés.
tagged templatem.Un template literal précédé d’une fonction, qui reçoit les valeurs à part : $queryRaw les envoie en paramètres, jamais dans le texte de la requête.
hookm.Une fonction qu’un outil appelle de lui-même à un moment donné, par exemple avant ou après une écriture.
shutdown hookm.Une méthode que NestJS appelle à l’arrêt de l’application, pour fermer ce qu’elle a ouvert.
bootstrapm.Le fichier qui démarre l’application : main.bootstrap.ts.
change data capture (CDC)m.La lecture des changements d’une base de données, ligne par ligne, pour les transmettre ailleurs.
cachem.Une copie de données gardée à portée de main, pour éviter de les relire à la source.
monitoringm.La surveillance d’un système en fonctionnement : métriques, alertes, état de santé.
provisioningm.La mise à disposition automatique des ressources d’infrastructure.
triggerm.Du code que la base de données exécute d’elle-même à chaque écriture sur une table.
reportingm.Les états et les tableaux de bord produits à partir des données, pour piloter l’activité.
driverm.La bibliothèque qui parle le protocole d’une base de données.
query builderm.Une API qui construit une requête SQL par appels successifs.
ORMm.La bibliothèque qui relie les objets aux tables.
lazy loadingm.Le chargement d’une relation au moment où on la lit.
tenantm.Un client isolé dans une application qui en sert plusieurs (multi-tenant).
test doublem.Un faux objet qui remplace une dépendance dans un test (mock, stub, fake).
fakem.Un test double qui fonctionne vraiment, mais simplifié : un repository in-memory, un serveur qui imite un provider.
mock, stubm.Des test doubles écrits d’avance : un stub renvoie des réponses fixées, un mock vérifie aussi comment on l’a appelé.
fixturef.Les données ou objets préparés pour un test.
test driverm.Un helper qui pilote l’application dans un test boîte noire, sans rien vérifier lui-même.
runnerm.L’outil qui trouve les tests et les lance, comme Vitest.
end-to-endadj.Se dit d’un test qui traverse toute l’application démarrée, de son entrée à la base.
lintm.L’analyse statique du code, qui signale ce qui enfreint une règle sans l’exécuter.
fitness functionf.Un contrôle automatique d’une règle d’architecture, en CI.
diffm.Les lignes qu’un changement ajoute, modifie ou retire, telles qu’on les relit.
ticketm.Une tâche ou un problème suivi dans l’outil de l’équipe.
findingm.Un écart relevé par une revue, rattaché à une règle.
merge request (MR)f.Une demande d’intégration de code, relue avant d’être fusionnée (pull request ailleurs).
waiverm.La dérogation documentée à une règle, signalée par un commentaire dans le code.
ADRf.Une décision d’architecture, numérotée, jamais réécrite.
building blockm.Une classe de base fournie par un package (AggregateRoot, ValueObject), que le code du modèle étend.
packagem.Une bibliothèque publiée sur npm, qu’un projet installe en dépendance.
user storyf.Un besoin décrit du point de vue de celui qui l’exprime, avec ses critères d’acceptation.
skillm.Une commande de Claude Code qui guide une étape du travail, lancée par / suivi de son nom.

Intégration ​

TermeGenreSens
integration eventm.Un event publié à d’autres bounded contexts, dans le published language.
producer, publisherm.Le bounded context qui émet un message.
consumer, subscriberm.Le code qui reçoit les messages d’un autre bounded context.
queuef.Une file de messages, lus dans l’ordre par un consumer.
in-processadj.Qui s’exécute dans le même processus que l’appelant, sans passer par le réseau.
in-memoryadj.Qui garde ses données dans la mémoire du processus, sans base : un repository in-memory.
call stackf.La pile des appels de fonction en cours, de l’appelant d’origine jusqu’à la fonction qui s’exécute.
messagingm.L’acheminement des messages entre processus, par un broker ou par l’outbox.
event emitterm.Un objet qui diffuse des events dans le processus, à ses listeners.
listenerm.Une fonction abonnée à un event emitter, appelée à chaque event.
brokerm.Le système qui transporte les messages entre processus.
tolerant readerm.Un consumer qui ne lit que ce dont il a besoin et ignore le reste.
retry, timeoutm.Une nouvelle tentative ; un délai d’attente au-delà duquel l’appel échoue.
back-offm.L’espacement croissant des tentatives après un échec, jusqu’à un plafond.
RPCm.Un appel de procédure à distance : un client appelle une fonction d’un autre processus et attend sa réponse.
BFF (backend for frontend)m.Une couche serveur dédiée à une interface, qui assemble ce dont elle a besoin.
front endm.La partie d’une application qui tourne chez l’utilisateur : l’interface web ou mobile.
long-running processm.Un processus métier qui s’étend sur plusieurs transactions et plusieurs bounded contexts.
dead letterf.Un message mis de côté quand tous ses retries ont échoué, pour qu’on l’examine.
sagaf.Un long-running process qui compense ses étapes en cas d’échec.

Termes traduits ​

Ces mots ont un équivalent français exact, d’usage courant : on écrit le français.

AnglaisFrançais
domain (le métier)domaine
domain expertexpert métier
strategic designconception stratégique
tacticaltactique
invariantinvariant
transactiontransaction
transactional consistencycohérence transactionnelle
identityidentité
layercouche
hexagonal architecturearchitecture hexagonale
modulemodule
contractcontrat
schemaschéma
persistencepersistance
dependency injectioninjection de dépendances
dependency inversion (DIP)inversion des dépendances (DIP)
notificationnotification
idempotentidempotent
black-box testtest boîte noire
integration testtest d’intégration
code reviewrevue de code
continuous integration (CI)intégration continue (CI)

Noms du code ​

Les noms qui viennent du code ne se traduisent jamais et s’écrivent en police de code : les dossiers (domain, application, driving, driven, public), les types de l’outillage (Result, Payload, Clock, RowMapper…), les rôles de fichiers (*.aggregate.ts, *.command.ts), les mots-clés (waiver) et les exemples (Wallet, deposit()).