Il Message Broker e l’Open/Close Principle
Immaginiamoci un componente, un qualsiasi XyzProvider, che viene usato un po’ ovunque istanziandolo direttamente con una malsanissima “new”, componente che avrebbe molto senso essere trattato come singleton ma che in realtà viene usato come transiente…
Adesso avete la necessità di consentire ad una “terza parte” di iniettare logica all’interno della pipeline delle azioni di quel componente, l’inghippo è che il componente non espone nessun extension point, il componente non è gestito da un “container” per “Inversion of Control” e di conseguenza vi scordate immediatamente qualsivoglia velleità di estensione…
Naturalmente non avete nessuna possibilità di modificare l’interfaccia pubblica…insomma una simpatica situazione del piffero
che fare?
“Messaging to the rescue”
Siete ovviamente, e fortunatamente, obbligati a disaccoppiare non avete scelta, ma come?
La soluzione più semplice è usare un broker, sfruttando il concetto di “domain events”:
- Non modificate l’interfaccia pubblica delle classi legacy;
- Potete fare broadcast/dispatch di messaggi in tutto il sistema e reagire a questi messaggi ovunque senza nessun bisogno di conoscere il mittente;
.m