La risposta è ... dipende da cosa intendi. Se stai cercando di ottenere un codice scalabile, la best practice consiste in genere nella creazione di un Domain Transfer Object (DTO) che è una vista nello stato corrente. Questo viene fatto di solito nei servizi stessi e viene rigenerato ogni volta che cambia l'oggetto del dominio (la consistenza finale è fondamentale, poiché il tentativo di mantenere la coerenza in ogni momento non accadrà). Il DTO è ottimizzato per la query che serve così come i dati che si intende visualizzare, può essere un composto di più di un oggetto dominio. Ma soprattutto è indipendente dall'oggetto dominio e non è a conoscenza dell'oggetto dominio. Potrebbe sembrare contraddittorio, ma non lo è. Suggerisco vivamente di leggere su Command Query Response Segregation (CQRS) in quanto è probabilmente l'approccio migliore a quello che stai facendo.
CQRS ti consente di rendere il tuo sito web (o qualsiasi cliente) agnostico al tuo dominio. Questo è importante in quanto il modello di dominio deve gestire internamente le proprie regole aziendali e non dovrebbe fare affidamento su un consumatore esterno per garantire coerenza e correttezza. Per quanto riguarda il sito Web, il dominio è il DTO progettato specificamente per le sue query. Quando hai bisogno del tuo sito web per poter cambiare il tuo dominio esponi i comandi che invia ai servizi con l'id dell'entità di dominio e i dati rilevanti solo per quel comando. I servizi eseguono quindi il comando o restituiscono un risultato dicendo che non erano in grado di farlo.
Ora la risposta completa qui deve venire con l'avvertenza di: se si tratta di un'applicazione interna solo a basso utilizzo, è necessario decidere se avere un modello di dominio / query scalabile conta più della velocità di completamento. Avete bisogno del sistema in fretta, o avete bisogno che il sistema sia veloce e scalabile.