L'objet standard et les règles de deps

La règle

Signature unique, client et serveur : (broker, instanceName, deps). register au constructeur, destroy() symétrique. emits et receives déclarés ; l'abonné ne déclare pas de révision. Tout le reste arrive par deps.

Pourquoi

Un objet qui va chercher quelque chose connaît quelque chose, et n'est plus testable seul. Avec une signature unique, un test construit l'objet exactement comme la composition, avec d'autres dépendances.

Dans le chat

Contre-exemple

import { PORT } from "../config.js";          // interdit dans un composant
const db = await open(process.env.DB_URL);     // idem : URL et environnement

Le broker ne dira rien : c'est une règle de conception, vérifiée par la check-list et par l'impossibilité de tester le composant sans l'environnement.

Les cinq règles de deps

  1. Tout ce qui n'est ni le broker ni le nom d'instance arrive par deps, à la construction. Jamais de process.env, d'import de configuration, de singleton. Ce qu'un composant ne reçoit pas, il ne l'a pas.
  2. deps est opaque au framework, à une clé près : support, normalisée au constructeur, nettoyée par destroy(). deps n'est pas un second catalogue.
  3. Un handle ne voyage jamais en message : une ressource se passe au constructeur.
  4. La propriété reste au point de composition : destroy() ne ferme pas ce qu'il n'a pas ouvert. Seule exception : un canal ferme son transport sur violation de protocole.
  5. On passe la ressource ouverte, pas son URL : un pool, pas une chaîne de connexion ; un socket, pas une adresse.

config.js et .env peuvent exister ; seuls server.js et index.html ont le droit de les importer.

Supports

Un composant dont l'interface vit à deux endroits reçoit une carte : { support: { liste: node, saisie: node } }. Il peint dans this.supports.liste et this.supports.saisie ; this.support vaut undefined, et c'est correct. Sans cette possibilité, il faudrait découper par la géométrie de l'écran là où le framework demande de découper par fonction.

Cycle de vie

ERROR (broker): message_demande published by ecran_fil without emitter registration — dropped ERROR (broker): message_poste: unregister by ecran_fil refused — the registration belongs to another object (homonym)

Composants uniques

Le cas normal est une instance par classe. Ne faites jamais transiter un nom d'instance dans un payload. Pour corréler un aller-retour : un ref de message (UUID). Pour atteindre un client : la clé d'enveloppe id.