Il problema che continuo ad affrontare è come gestire i valori calcolati guidati dalla logica di dominio mentre si lavora ancora in modo efficiente con l'archivio dati.
Esempio:
Sto restituendo un elenco di prodotti dal mio repository tramite un servizio. Questo elenco è limitato dalle informazioni di impaginazione della richiesta DTO inviata dal client. Inoltre, il DTO specifica un parametro di ordinamento (un enum client-friendly).
In uno scenario semplice, tutto funziona alla grande: il servizio invia espressioni di paging e ordinamento al repository e il repository invia una query efficiente al DB.
Tutto ciò si interrompe, tuttavia, quando ho bisogno di ordinare i valori generati in memoria dal mio modello di dominio. Ad esempio, la classe Product ha un metodo IsExpired () che restituisce un bool basato sulla logica aziendale. Ora non riesco a ordinare e sfogliare 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 ordinamento / paging si.
L'unico modello che sembra avere senso per me è quello di memorizzare lo stato dell'entità nel db (rendere IsExpired () un campo di sola lettura e aggiornarlo tramite la logica del dominio prima di salvare). Se separo questa logica in un repository "read model / dto" e "reporting" separato, 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 davvero appoggiarsi all'elaborazione in memoria e al glossing 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, dato che sono sicuro che sia comune su quasi un progetto che coinvolge DDD.