Al compleanno di UGI parlando di “Services UI Composition” ho sottolineato un dettaglio che a pensarci bene è di una banalità disarmante, banalità che a volte è meglio ripetersi un paio di volte di troppo al fine di evitare fantasmagorici castelli di carta, o come dicono i francesi “seghe mentali” :-)
In DDD esiste il concetto di Ownership, in SOA esiste il concetto di Ownership, quando si parla di sistemi di messaggistica, Command e Pub/Sub, esiste il concetto di Ownership. Quando si parla di UI? silenzio…
In realtà se ci pensiamo bene ogni volta che la UI fa un’azione quell’azione è responsabilità in primis di qualcuno e solo in seguito alla reazione dell’owner altri attori possono reagire e contribuire. Questo è vero anche per le letture: voglio l’elenco degli ordini. Vado da chi gestisce gli ordini, mi faccio dare l’elenco e poi lo arricchisco con le informazioni che mi servono.
Ovviamente immediatamente tutti abbiamo, me compreso, pensato: voglio l’elenco degli ordini per i clienti che vivono in questa regione e che hanno acquistato il prodotto xyz negli ultimi 6 mesi. Sono due use case radicalmente diversi e il secondo nello specifico probabilmente è una questione di “reporting”, ma è un’altra storia, ci arriveremo.
Tornando a noi: Ownership
Questo è il principio alla base di tutto quello che abbiamo detto fino ad oggi quando abbiamo parlato di “Services UI Composition”, di seguito un breve riepilogo dei post:
Se vogliamo possiamo visualizzare quello di cui abbiamo discusso fino ad ora nel seguente modo:
I vari “Actor” si registrano in base al compito che vogliono svolgere, nell’esempio di cui sopra Marketing è l’owner della query mentre gli altri reagiscono all’evento che notifica che la richiesta inziale è stata esaudita e fanno il loro lavoro per arricchire il modello e renderlo un “Composed ViewModel” che la UI sia poi in grado di visualizzare.
OK, tutto bello direte voi, e come abbiamo già detto un esempio lo trovate qui: https://github.com/mauroservienti/Services-UI-Composition
E le scritture?
To be continued…