Questo è un semplice esempio per mostrare una situazione che trovo difficile risolvere con DDD.
Considera questo: - Una proprietà (ad esempio una casa) ha un indirizzo. - Un indirizzo può essere completo o parziale (solo paese, paese e stato, paese, stato e città). - Quando un utente finale cerca proprietà, ho bisogno di visualizzare un elenco di tutti i paesi. - Quando viene selezionato un paese, devo recuperare tutti gli stati correlati. - Quando viene selezionato uno stato, ho bisogno di recuperare tutte le città correlate.
Questo può essere fatto facilmente usando un approccio basato sui dati (interrogando su un modello relazionale), ma quando provo a modellarlo, pensando a Domain Driven Design, sto fallendo.
Ho questo ovvio vincolo:
- Una città non può esistere senza una proprietà.
- Una proprietà non può esistere senza un paese.
Conclusione: il Paese è la radice aggregata per rafforzare questi vincoli.
Suppongo che l'indirizzo sia un'altra radice aggregata. Ma l'indirizzo può riferirsi solo ad una radice aggregata, quindi come posso riferire un indirizzo parziale? Devo pensare in un'altra radice? Quando ho bisogno di interrogare per città, ho bisogno di portare l'intera radice aggregata del paese? E se avessi bisogno di cercare tutte le città disponibili per una determinata stringa? Devo interrogare per tutti i paesi e non per le relazioni trasversali?
In questa situazione, la soluzione più ovvia per me è avere e aggregare root per città, stato, paese e indirizzo. Ma questo è un modello anemico. Ma per evitare un modello anemico, sembra che l'unico modo per risolvere sia avere modelli diversi. Uno per inserire nuove città (usando l'aggregato paese) e altre per recuperare e associare quelle entità. Ma questo ha un cattivo odore.
È molto difficile trovare un campione che copra una situazione come questa. Qualcuno può darmi delle indicazioni? Sto bene a raccomandare un libro, ma mi piacerebbe qualche intuizione diretta .
Ho letto molto su DDD e conosco la maggior parte dei termini (aggregato, entità, servizi, associazioni, oggetti valore).