Stiamo lavorando su un'applicazione MVVM. Jersey (backend) che espone un'interfaccia REST e AngularJS (frontend) è l'unico consumatore di questa interfaccia. L'applicazione utilizza un modello di database complesso (modello dati), diverso dal modello presentato all'utente nel browser (modello di visualizzazione).
Attualmente abbiamo riscontrato il seguente dilemma:
- per introdurre classi DTO (Data Transfer Object) che conterranno tutti gli attributi richiesti per richiamare operazioni di business logic complesse sul nostro modello
- esporre il modello di dati complessi esistente senza introdurre le classi DTO
L'approccio 1 consentirà semplicemente ai client dell'interfaccia REST, in quanto non dovranno comprendere il modello di dati e dovranno solo fornire i valori di tutti gli attributi richiesti nelle classi DTO. Tuttavia, questo approccio richiede l'introduzione di un layer di mappatura nel back-end, da / verso il modello dati da / verso il modello di visualizzazione.
L'approccio 2 produce meno codice nel back-end, ma probabilmente renderà il codice nel frontend più complesso in quanto dovrà fare la mappatura dell'input dell'utente al modello di dati esistente.
Dal punto di vista del progetto REST 2 sembra essere meglio, ma esponendo il modello dei dati in REST sempre la soluzione migliore?