UC-02 · L’application parle en use cases, pas en protocoles
Signal
- Un use case ou le domaine qui manipule des types du transport :
Request,Response, exceptions HTTP, en-têtes, messages bruts d’un broker. - Deux méthodes de l’application presque identiques, l’une pour REST, l’autre pour la messagerie.
- Un adapter
driving(controller, consumer) qui fait plus que traduire l’entrée et déléguer.
Pourquoi
Chaque adapter transforme l’entrée de son client en un appel à l’API de l’application. Tous les adapters appellent la même API. L’application est conçue autour de ses use cases, pas autour du nombre de ses clients. Dans une bonne conception, l’application et le domaine ne laissent rien fuir vers les adapters.
Exceptions
Aucune.
Correction
L’application reçoit des commands ou des paramètres neutres, et renvoie des erreurs de l’application ou du domaine. L’adapter driving traduit dans les deux sens.
Adaptation
Notre choix : le domaine et l’application renvoient leurs erreurs métier dans un Result, et l’adapter driving traduit ce résultat en réponse HTTP. Un exception filter reste en place pour les erreurs inattendues : pannes et bugs.
Exemple
ts
// Avoid: the application speaks HTTP
if (!wallet) {
throw new NotFoundException('Wallet not found');
}ts
// Preferred: a domain error, which driving translates into a 404
if (!wallet) {
return err(new WalletNotFound(walletId));
}