Fate un favore a voi stessi, non fate la corsa al nome (parafrasando la corsa all’oro).
Torno sull’argomento importanza del linguaggio perché mi sto rendendo conto che noi tecnici siamo governati dalla frenesia del mettere in ordine, dalla necessità di trovare nel più breve tempo possibile il posto giusto per le cose. Questa stessa frenesia ci spinge, quando modelliamo, a dare molto rapidamente un nome alle cose anche se spesso non abbiamo ancora compreso a fondo.
Mai errore fu più grave
Modellare, o per dirla in termini Domain Driven Design identificare i boundary, è l’attività più difficile e fondamentale in assoluto: non farla o, forse peggio, farla male può avere conseguenze nefaste.
Una delle cose molto interessanti di avere a che fare con Services UI Composition, e in quest’ultimo periodo quasi giornalmente con Udi, è che mettete in dubbio le vostre convinzioni ad ogni piè sospinto.
Durante il processo di modellazione osservo che tendiamo a dare molto rapidamente un nome alle cose, e questo devira fondamentalmente da due cose:
- pensiamo spesso a come le cose sono aggregate (pensate ad una UI) per l’utente finale e traduciamo aggregate sulla UI in aggregato nel modello
- tendiamo a raggruppare i dati per appartenenza e non per affinità
Appartenenza e affinità
Un cliente è caratterizzato da nome, cognome, punti fragola e indirizzo di residenza. Questo è quello che la nostra tessera (la UI) dell’Esselunga ci dice, la domanda è: abbiamo quindi una classe (o aggregato) Cliente del tipo?
{
nome: …
cognome: …
puntiFragola: …
indirizzo: …
}
Una modellazione di questo tipo è figlia principalmente dell’ascoltare la cosa sbagliata.
Provate a pensare a chi modifica quei dati. I “punti fragola” hanno un ciclo di vita completamente diverso dai dati anagrafici dell’utente. Non solo probabilmente i punti fragola cambiano insieme ad altri dati, come ad esempio gli acquisti. La domanda quindi dovrebbe essere non tanto chi possiede queste caratteristiche ma piuttosto chi modifica e insieme a che cosa vengono modificate.
Per tutto il resto c’è Services UI Composition.