Il problema che affronto continuamente è come gestire i valori calcolati guidati dalla logica del dominio mentre si sta ancora lavorando efficientemente contro l'archivio dati.
Esempio:
Sto restituendo un elenco di prodotti dal mio repository tramite un servizio. Questo elenco è limitato dalle informazioni sulla paginazione dalla richiesta DTO inviata dal cliente. Inoltre, il DTO specifica un parametro sort (un enum client-friendly).
In uno scenario semplice, tutto funziona alla grande: il servizio invia le espressioni di paging e di ordinamento al repository e il repository invia una query efficiente al DB.
Tutto ciò non funziona, tuttavia, quando devo ordinare i valori generati in memoria dal mio modello di dominio. Ad esempio, la classe Product ha un metodo IsExpired () che restituisce un valore bool in base alla business logic. Ora non riesco a ordinare e pagina a livello di repository - tutto sarebbe stato fatto in memoria (inefficiente) e il mio servizio avrebbe dovuto conoscere la complessità di quando inviare questi parametri al repository e quando eseguire l'ordinamento / il paging stesso.
L'unico schema che sembra avere senso per me è quello di memorizzare lo stato dell'entità nel db (rendere IsExpired () un campo readonly e aggiornarlo tramite la logica del dominio prima di salvare). Se separo questa logica in un repository separato "read model / dto" e "reporting", sto rendendo il mio modello più anemico di quanto mi piacerebbe.
A proposito, ogni esempio che ho visto là fuori per calcoli come questo sembra poggiare sull'elaborazione in memoria e sul fatto che è molto meno efficiente a lungo termine. Forse sto ottimizzando prematuramente, ma questo non mi sta proprio bene.
Mi piacerebbe sapere come gli altri hanno affrontato questo problema, sono sicuro che è comune su quasi un progetto che riguarda il DDD.