Noto che tutti i post che parlano di DDD raccolgono molti commenti, segno che l’argomento è caldo e che le persone nutrono molto interesse in questo nuovo movimento, la domanda è: stiamo realmente parlando di qualche cosa di nuovo?
La mia personale opinione è che, seguendo sempre di più il movimento DDD, tutte le tecniche, pattern, concetti che emergono sono semplicemente quelli dell’Object Oriented Programming, ovvero concetti che sono in giro da quasi venti anni, allora la domanda è: Perchè proprio ora tutto questo interesse? A mio avviso la risposta deve essere cercata in una necessaria “sedimentazione” che tutte le nuove tecnologie debbono superare affinché riescano veramente ad emergere.
Quando i primi linguaggi veramente ad Oggetti hanno iniziato a fare capolino, si è subito iniziato a parlare di concetti veramente nuovi, delle vere breaking-changes epocali, come ad esempio l’incapsulamento, ma ogni cambiamento radicale ha bisogno di tempo per essere metabolizzato. Prendiamo ad esempio proprio il concetto di incapsulamento, e vediamo un estratto della definizione di wikipedia
encapsulation means that the internal representation of an object is generally hidden from view outside of the object's definition. Typically, only the object's own methods can directly inspect or manipulate its fields
Da qui possiamo subito vedere che la rappresentazione interna (lo stato) è nascosto, e che solo i metodi propri dell’oggetto possono ispezionare o manipolare i suoi campi (lo stato). Da qui il concetto che i property setter e getter sono antipattern e che nessun oggetto dovrebbe avere altro che metodi. Capisco che questa affermazione suona sempre radicale, ma in CQRS e soprattutto con l’Event Sourcing tutto il discorso torna e spesso porta con se semplificazioni veramente drammatiche del codice.
Se qualcuno di voi si è mai trovato a rispondere al seguente quesito “sto modificando questa proprietà di un oggetto, quale altro codice la usa?” capirete cosa voglio dire. Quindi, sempre per mia personalissima opinione, per anni i linguaggi ad oggetti sono stati usati in modo prettamente procedurale e data oriented. Un segnale di questo è l’enorme volume di discussione legata agli ORM, che mi fa sospettare che le persone siano troppo focalizzate sui Dati piuttosto che sulle “operazioni”. Se noi pensiamo veramente in termini di oggetti e metodi, difficilmente avremo cosi tanto da discutere su un ORM.
L’interesse che in questi anni si sta creando attorno al DDD, secondo me, è semplicemente dovuto al fatto che, dopo un lungo tempo di sedimentazione, tutti i concetti base dell’OOP stanno tornando nuovamente a galla, ora che i tempi sono probabilmente più maturi.
Gian Maria.