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 Item
s. - Ogni
Order
può avere solo il 1000% diLine Item
s. (Regola aziendale).
Passi
Per poter aggiungere una Line Item
a Order
dovrei:
- Ricostituire
Order
con tutti èLine Item
s dal suo repository.-
orderRepo.getById(1)
-
- aggiungi
Line Item
aOrder
,-
order.addLineItem(lineItem)
-
- Salva nuovamente
Order
tramite 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.