Che cos'è il Domain-Driven Design?
DDD è un approccio allo sviluppo software che si concentra sulla comprensione del dominio aziendale e sulla modellazione del software intorno ad esso. Si tratta di linguaggio, confini e pattern.
Concetti Fondamentali
Contexti Limitati
Un contesto limitato definisce il confine entro cui un particolare modello di dominio si applica. La stessa parola può avere significati diversi in contesti diversi.
// Contesto Ordine
class Order {
constructor(id, customerId, items, status) {
this.id = id;
this.customerId = customerId; // Riferimento, non oggetto completo
this.items = items;
this.status = status;
}
}
// Contesto Magazzino
class StockItem {
constructor(productId, warehouse, quantity) {
this.productId = productId;
this.warehouse = warehouse;
this.quantity = quantity;
}
}Aggregati
Un aggregato è un cluster di oggetti di dominio trattati come unità singola per le modifiche dei dati. La radice dell'aggregato è l'unico punto di ingresso per le modifiche.
class OrderAggregate {
constructor(order) {
this.order = order;
this.items = [];
}
aggiungiItem(product, quantity) {
const item = new OrderItem(product.id, quantity, product.price);
this.items.push(item);
this.order.total = this.items.reduce((sum, i) => sum + i.subtotal, 0);
}
}Tempesta di Eventi
Una tecnica collaborativa per scoprire gli eventi di dominio, i comandi e gli aggregati. Esegui un workshop con esperti del dominio e sviluppatori insieme.
- Posiziona note adesive per gli eventi di dominio (arancione)
- Identifica i comandi che attivano gli eventi (blu)
- Gruppa gli eventi correlati in aggregati (giallo)
- Definisci i contesti limitati intorno ai cluster
Conclusione
DDD non è sui pattern — è sulla comprensione del dominio. Investi tempo nel linguaggio ubiquo e nel modellamento del dominio prima di scrivere il codice.