In questi giorni ho chiesto aiuto a Matteo Migliore, un consulente di Architetture software. Mi ha mostrato alcune evidenze che mi stanno facendo cambiare il modo di pensare la costruzione del software. Uno dei modelli che mi ha consigliato si basa sul DDD: il Domain Driven Model.
Sto guardando un intervento di Eric Evans, presentato alla conferenza JAOO del 2007, dal titolo DDD: putting the model to Work. L’intervento ha una seconda parte.
Eric Evans è un esperto di Architetture Software e in particolare è l’autore del libro “Domain-Driven Design” (Addison-Wesley, 2003).
Il modello che propone parte dall’assunto che la parte più complessa di un programma è scritta nel layer di dominio, il cosiddetto Business.
Il Dominio è l’argomento e il mondo dell’attività che il programma è chiamato a fare. Gli elementi che lo compongono sono reali, sono i veicoli e le strade in un sistema di tracking, sono gli aerei e le persone in un sistema di prenotazioni.
Il Modello, in una definizione molto larga, è un sistema di astrazioni che descrive una porzione di aspetti del dominio che può essere usata per risolvere problemi di quel domiino. Quindi per il dominio dell’applicazione occorre definire almeno un modello, usato nella scrittura del codice.
Il modello non deve essere realistico: deve semplificare la descrizione del Dominio da parte del software, tanto che la parte di modello che non si riflette nel software è irrilevante. Quindi la domanda che ci si deve porre quando si disegna un modello ci si deve chiedere:
Quale astrazione è più utile?
La risposta è che è meglio scegliere quella più concreta. Quella più vicina ai concetti di chi ci lavora, agli esperti del dominio. Lavorando con il modello si deve poter mappare, in sostanza, le frasi e i concetti che gli esperti del dominio usano nelle loro attività.
Quel linguaggio deve essere presente ovunque: il linguaggio comune degli esperti del dominio (che a volte non sono tecnici), agli sviluppatori e al software.
Tuttavia a volte non può essere così: qualora si attinga a modelli diversi, magari perché si decide di acquisire una libreria di terze parti, oppure si deve integrare del legacy, o delle tecnologie nuove, ci si può trovare ad avere più modelli, ognuno con un linguaggio potenzialmente diverso dagli altri.
I concetti di modelli diversi vengono separati in contesti differenti (Context).
Quando ci sono quindi più modelli dello stesso dominio, questi definiscono una “Context Map”.
Occorre definire all’interno di questa mappa di contesti le “translation map” che permettono di definire le relazione tra gli elementi dei modelli.
Il disegno non può essere preciso e completo.
Anzi, più è preciso e più è fragile.
Quando cambiano i requisiti rimane facile modificare i modelli relativi. Occorre successivamente verificare ed eventualmente modificare le “translation map”.