Ho un progetto con un'app client desktop interna e un servizio API client sul lato server che parla con un database relazionale. Mi sembra di avere due scelte:
1) forma DTO alle viste del cliente, ad es. AccountOperviewInfoDto e AccountFullDetailsDto per uno scenario GUI master-dettaglio:
- + viene trasferita una quantità ottimale di dati;
- + le query sul database lato server sono più ottimali;
- + sono necessarie meno conversioni / mapping di oggetti (dominio - > DTO);
- - I DTO sono accoppiati a diversi paradigmi della GUI client (schermo grande desktop vs schermo piccolo mobile);
- - l'API del client è accoppiata all'app client in termini di modifiche e implementazione.
2) rendere i DTO "universali" mantenendoli vicini al modello di dominio e quindi modellandoli alla GUI tramite gli oggetti viewmodel:
- - viene trasferita una quantità non ottimale di dati;
- - le query sul database lato server sono meno ottimali;
- - sono necessarie più conversioni / mapping degli oggetti (dominio - > DTO - > viewmodel).
- + DTO sono disaccoppiati da diversi paradigmi della GUI client (schermo grande desktop vs schermo piccolo mobile);
- + l'API del client è disaccoppiata dall'app client in termini di modifiche e implementazione.
Qual è la migliore pratica se ce n'è? Ci sono altre scelte?