Mi sto tuffando nel Domain Driven Design e alcuni dei concetti che sto incontrando hanno molto senso in superficie, ma quando ci penso di più, mi chiedo se sia davvero una buona idea.
Il concetto di aggregati, ad esempio, ha un senso. Crei piccoli domini di proprietà in modo da non dover gestire l'intero modello di dominio.
Tuttavia, quando ci penso nel contesto di un'app Web, spesso colpiamo il database per ritirare piccoli sottogruppi di dati. Ad esempio, una pagina può elencare solo il numero di ordini, con collegamenti su cui fare clic per aprire l'ordine e vedere l'id del suo ordine.
Se io sono Aggregati giusta comprensione, vorrei in genere utilizzare il modello di repository per restituire un OrderAggregate che dovrebbe contenere i membri GetAll
, GetByID
, Delete
, e Save
. Ok suona bene. Ma...
Se chiamo GetAll per elencare tutti i miei ordini, mi sembra che questo modello richiederebbe la restituzione dell'intero elenco di informazioni aggregate, gli ordini completi, le righe dell'ordine, ecc ... Quando ho bisogno solo di un piccolo sottoinsieme di tali informazioni (solo informazioni di intestazione).
Mi sto perdendo qualcosa? O c'è qualche livello di ottimizzazione che useresti qui? Non riesco a immaginare che qualcuno sosterrebbe la restituzione di interi aggregati di informazioni quando non ne hai bisogno.
Certamente, si potrebbero creare metodi sul proprio repository come GetOrderHeaders
, ma questo sembra vanificare lo scopo di utilizzare un modello come repository in primo luogo.
Qualcuno può chiarire questo per me?
MODIFICARE:
Dopo molte più ricerche, penso che la disconnessione qui sia che un modello di Repository puro è diverso da quello che la maggior parte delle persone considera un Repository come essere.
Fowler definisce un repository come un archivio dati che utilizza la semantica della raccolta e viene generalmente tenuto in memoria. Questo significa creare un intero oggetto grafico.
Evans modifica il repository in modo da includere le radici degli aggregati, e quindi il repository viene amputato per supportare solo gli oggetti in un aggregato.
La maggior parte delle persone sembra pensare ai repository come a oggetti di accesso ai dati glorificati, in cui si creano semplicemente metodi per ottenere qualsiasi dato desiderato. Questo non sembra essere l'intento descritto in Patterns of Enterprise Application Architecture di Fowler.
Altri ancora pensano a un repository come a una semplice astrazione utilizzata principalmente per rendere più facili i test e le derisioni o per separare la persistenza dal resto del sistema.
Immagino che la risposta sia che questo è un concetto molto più complesso di quanto pensassi inizialmente.