PLC-03 · Chaque fichier va dans la couche de son rôle
Signal
domain/wallet/wallet.controller.ts,application/wallet/wallet.mapper.ts,driving/http/wallet.aggregate.ts.- Un
.serviceou un.value-objectdans l’applicationd’un bounded context tactique. src/wallets/wallet.aggregate.ts, hors de toute couche.
Pourquoi
Le rôle dit ce que fait un fichier, la couche dit ce dont il peut dépendre (LAY-01). Un controller dans le domaine, un mapper dans l’application ou un aggregate dans un adapter est une règle de dépendance qui attend d’être enfreinte : le fichier importera ce dont son rôle a besoin, et sa couche le lui interdit. Associer chaque rôle à ses couches rend l’erreur de placement visible dès le nom, avant qu’elle n’apparaisse dans les imports.
Exceptions
Les rôles de wiring (.module, .wiring, .bootstrap, .config) vont partout : ils assemblent ce qui vit autour d’eux.
Correction
Déplacer le fichier dans la couche de son rôle, ou le renommer d’après le rôle qu’il joue vraiment.
| Couche | Rôles |
|---|---|
domain | .aggregate, .entity, .value-object, .id, .events, .errors, .repository, .port, .service, .factory, .policy, .specification |
application | .command, .query, .view, .port ; dans un bounded context en transaction scripts, .service, .errors et .value-object |
driven | .repository, .adapter, .mapper, .translator, .client |
driving | .controller, .listener, .consumer, .relay, .scheduler, .cli, .adapter, .request, .representation, .parser, .http, .filter, .pipe, .guard |
public | .facade, .dto, .integration-events, .contract |
| toutes | .module, .wiring, .bootstrap, .config |
Voir aussi
NAM-01 fait finir chaque fichier par son rôle, pris dans cette liste. PLC-04 à PLC-09 découpent chaque couche. TXS-05 donne les couches d’un bounded context en transaction scripts.