Appels distants et processus
Un appel distant peut échouer, attendre, ou répondre en retard. Ces règles gardent les appels distants explicites et rares, modélisent ce qui n’est pas encore disponible, rendent explicites les processus qui traversent plusieurs bounded contexts, et empêchent une couche de composition de devenir un modèle caché.
En pratique
Le bounded context wallets demande un taux de change à un fournisseur externe. L’adapter fait l’appel :
ts
export class HttpExchangeRates extends ExchangeRates {
// ...
async current(from: string, to: string): Promise<RateLookup> {
const url = new URL(`quotes?pairs=${from}${to}`, this.#endpoint);
const response = await fetch(url, { signal: AbortSignal.timeout(2_000) }).catch(() => undefined);
if (!response?.ok) {
return { found: false };
}
return this.#translator.toLookup(await response.json(), from, to);
}
}Le use case décide quoi faire sans taux :
ts
const lookup = await this.#rates.current(command.from, command.to);
if (!lookup.found) {
return err(new RateUnavailable(command.from, command.to));
}- Un appel distant n’est pas un appel local : il a un timeout, ici deux secondes, et une panne du réseau ou un fournisseur qui ne répond pas donne le même résultat, pas de taux (PRC-01).
- L’absence de taux n’est pas une exception : le port renvoie
found: false, et le use case la transforme en un refus explicite (PRC-03).
Règles
Appels distants
| Code | Règle | Sévérité | Détection |
|---|---|---|---|
| PRC-01 | Un appel distant n’est pas un appel local | majeure | |
| PRC-02 | Limiter les dépendances en temps réel | question | |
| PRC-03 | Une ressource distante pas encore disponible est un état du modèle | majeure |
Processus entre bounded contexts
| Code | Règle | Sévérité | Détection |
|---|---|---|---|
| PRC-04 | Un bounded context ne transforme pas un event étranger en command implicite | question | |
| PRC-05 | Un long-running process a une identité, un suivi et un chemin d’échec | majeure |
Composer plusieurs bounded contexts
| Code | Règle | Sévérité | Détection |
|---|---|---|---|
| PRC-06 | Une couche de composition ne devient pas un modèle caché | question |