Nella mia applicazione Spring MVC sto usando DTO nel livello di presentazione al fine di incapsulare il modello di dominio nel livello di servizio. I DTO vengono utilizzati come oggetti di sostegno della forma della molla.Spring MVC: il livello di servizio deve restituire DTO specifici di operazioni?
quindi i miei servizi simile a questa:
userService.storeUser(NewUserRequestDTO req);
Il livello di servizio si tradurrà DTO -> oggetto Dominio e fare il resto del lavoro.
Ora il mio problema è che quando voglio recuperare un DTO dal servizio per eseguire un aggiornamento o una visualizzazione, non riesco a trovare un modo migliore di farlo per avere più metodi per la ricerca che restituiscono diversi DTO è come ...
EditUserRequestDTO userService.loadUserForEdit(int id);
DisplayUserDTO userService.loadUserForDisplay(int id);
ma qualcosa non sembra giusto per questo approccio. Forse il servizio non deve restituire cose come EditUserRequestDTO e il controllore deve essere responsabile di assemblare un requestDTO da un formulario oggetto dedicato e viceversa.
Il motivo hanno separato DTO è che DisplayUserDTO è fortemente tipizzato per essere letto solo ed inoltre ci sono molte proprietà di utenti che sono entità di una tabella di ricerca nel db (come città e stato) in modo che il DisplayUserDTO avrebbe il descrizione delle stringhe delle proprietà mentre EditUserRequestDTO avrà gli id che sosterranno gli elenchi a discesa di selezione nei moduli.
Cosa ne pensi?
grazie
Grazie per la risposta. Se si utilizza l'oggetto dominio per un'operazione di modifica, si utilizza anche l'oggetto dominio per una nuova operazione e tutto il resto, perché solo per una modifica? Nel mio caso sono bloccato con un oggetto dominio anemico, non posso fare nulla al riguardo. La ragione del DTO è che i miei oggetti di dominio sono complessi con molte relazioni e proprietà che non ho bisogno per le mie viste. – arrages
vedere i miei commenti sopra ... – GMK
Grazie a GMK, il motivo per cui stavo pensando di farlo non è perché è più leggero nel sistema. Penso che ci sia una ragione legittima per quello che voglio fare. È vero che non devo usare nulla di ciò che non mi serve dall'oggetto dominio, ma usare l'oggetto per ottenere ciò di cui ho bisogno può essere difficile a volte, c'è anche un problema di sicurezza dato che la vista avrebbe accesso ai campi che non dovrebbe avere e bloccare l'oggetto è probabilmente altrettanto problematico. – arrages