Sto leggendo il libro blu DDD e c'è una cosa che non mi è ancora chiara e che è come eseguire in modo efficiente semplici operazioni su Aggregate che contengono molte Entità secondarie.
Un esempio
- Considerando che ho un
Order, (radice aggregata) conLine Items. - Ogni
Orderpuò avere solo il 1000% diLine Items. (Regola aziendale).
Passi
Per poter aggiungere una Line Item a Order dovrei:
- Ricostituire
Ordercon tutti èLine Items dal suo repository.-
orderRepo.getById(1)
-
- aggiungi
Line ItemaOrder,-
order.addLineItem(lineItem)
-
- Salva nuovamente
Ordertramite il repository.-
orderRepo.save(order)
-
A meno che mi manchi qualcosa, questo mi sembra terribilmente inefficiente. E se avessi il 900% diLine Items su quel Order ? Dovrei caricare molti dati dal DB per eseguire questa semplice operazione.
Sì, potrei caricare pigro il LineItems ma anche in questo caso non sarò in grado di controllare la regola aziendale che richiede che < 1000 Line Items deve esistere in un Order , a meno che non sia tutto Line Items sono caricati.
Inoltre, le implementazioni di caricamento lento mi colpiscono come un anti-pattern perché solitamente legano gli accessor alle proprietà con i repository.