Lasciami condividere la mia opinione.
In un primo momento, penso che la tua domanda non abbia nulla a che fare con l'avvio a molla. L'avvio a molla offre solo un modo ingegnoso e leggero per avviare l'applicazione e consente di creare l'app in modo più semplice. Ma hai ancora il tuo controller di riposo lì e da quel punto non differisce molto per nessun altro tipo di applicazione.
Quindi, in effetti, è ragionevole mantenere un'astrazione di oggetti JSON e convertirli negli oggetti Entità di business logic e convertirli nuovamente in oggetti Database o sufficienti per mantenere solo 2 livelli e abbandonare il livello Json.
Penso che la risposta sia "dipende".
Prima di tutto, in generale attualmente la tendenza è una semplificazione. Quindi forse è sufficiente per mantenere solo 1 livello di oggetti.
Ci sono un sacco di vantaggi di un tale approccio:
- Ovviamente meno codice per mantenere
- velocità di sviluppo e test (POJO devono essere controllati, convertitori devono essere testati e così via)
- Velocità di esecuzione: non è necessario sprecare il tempo di CPU durante la conversione. Una sorta di ovvia implicazione.
- Meno ovvio: consumo di memoria. Diciamo che lavori con una grande quantità di dati restituiti dal tuo DAO. Diciamo che occupa 10 MB di memoria (solo per motivi di esempio). Ora, se inizi a convertire, in Entità aziendali, spenderai ancora 10MB e ora, se si tratta di oggetti A JSon, è di nuovo pari a 10 MB. Il punto è che tutti questi oggetti possono coesistere in memoria simultaneamente. Ovviamente GC si prenderà cura di loro se hai implementato tutto correttamente, ma questa è una storia diversa.
Tuttavia c'è un inconveniente di una tale semplificazione.
In una parola che lo definirei un impegno
Ci sono tre tipi di API nell'applicazione.
L'API a cui ti sei impegnato a livello di servizio Web: la struttura di JSon. Le probabilità sono che vari client (non necessari per utilizzare la JVM) siano in esecuzione contro il tuo servizio Web e consumano i dati. Quindi si aspettano davvero che tu fornisca un oggetto JSon della struttura data.
L'API della tua azienda. Se il tuo livello di logica aziendale è piuttosto complicato, probabilmente hai un intero team che sviluppa quella logica. Quindi di solito lavori a livello di API tra i team.
Il livello di DAO: la stessa storia di Business Logic.
Così ora, cosa succede se, per esempio, si modifica l'API a un livello. Significa che tutti i livelli saranno rotti?
Esempio
consente di dire, noi non manteniamo livello "JSON". In questo caso, se cambiamo l'API a livello di Business Logic, anche il JSON cambierà automaticamente. Tutti gli altri framework convertiranno felicemente l'oggetto per noi, e ci sono buone probabilità che l'utente ottenga altri dati.
Un altro esempio
permette di dire, il vostro livello di BL offre un'entità persona che assomiglia a questo:
class Person {
String firstName;
String lastName;
List<Language> languages;
}
class Language {
...
}
Ora, diciamo che si dispone di un'interfaccia utente che consuma il servizio REST che fornisce un elenco di persone su richiesta. Cosa succede se ci sono 2 diverse pagine nell'interfaccia utente. Uno che mostra solo le persone (in questo caso non ha senso fornire un elenco di lingue, pronunciate da una persona). Nella seconda pagina si desidera comunque ottenere tutte le informazioni.
Quindi, finirai per esporre 2 servizi web o complicare quello esistente con alcuni parametri (più parametri come questo hai, meno assomigli al resto :)) Forse la separazione potrebbe aiutare un po 'qui? Non lo so.
Bottom line. Direi che finché puoi vivere senza una tale separazione - fallo. Può funzionare anche per progetti abbastanza grandi. E, naturalmente, può funzionare per progetti di piccole o medie dimensioni.
Se ti trovi a dover affrontare delle correzioni e ritieni che una tale separazione possa risolvere i problemi, fai la separazione.
Spero che questo aiuti a capire le implicazioni e scegliere ciò che funziona per voi