Risposte:
L'aggiunta di un livello di servizio Web ti dà l'opportunità di rendere il tuo client più leggero, sia in termini di potenza della CPU richiesta sia in termini di larghezza di banda utilizzata durante l'elaborazione. Entrambi i fattori sono estremamente importanti per gli utenti finali:
Introducendo un livello di applicazione Web si sposta la maggior parte dell'elaborazione da un client portatile a bassa potenza, larghezza di banda ridotta, memoria ridotta a un server collegato, ad alta potenza ad alta larghezza di banda, che ha più memoria di esso esigenze: un ambiente in cui l'elaborazione e le comunicazioni costano una frazione di ciò che costano a un cliente.
Ma aspetta, c'è qualcosa anche per te: suddividendo il sistema ottieni un maggiore controllo sulle regole aziendali, sulla struttura del database e sulle versioni di ciò che è là fuori. Quando lasci che un client mobile si connetta direttamente al database, il tuo progetto viene "sposato" con quella struttura del database: quasi ogni modifica interromperebbe la retrocompatibilità con un client che potrebbe essere riluttante ad aggiornare la sua app.
Al contrario, l'aggiunta di un servizio Web nel mezzo ti consente di far evolvere l'interfaccia verso i client mobili in modi più gestibili: ad esempio, potresti mantenere la vecchia interfaccia in posizione, aggiungerne una nuova che funzioni "in parallelo" con essa, e quindi del tutto ristrutturare il database senza rompere un singolo client.
Se segui alcuni principi di progettazione piuttosto elementari durante la progettazione del tuo servizio web, potresti anche ottenere vantaggi significativi riutilizzando l'infrastruttura lato server matura che è stata implementata: ad esempio, puoi ottenere gratuitamente servizi cache e proxy.
Infine, questo aprirà la porta ad altri sviluppatori esponendo la tua applicazione a piattaforme che non potresti fornire assistenza, giocando in definitiva a vantaggio della tua azienda.
Mette uno strato di astrazione tra l'app e il DB. Questo ti offre molti vantaggi come:
Un altro motivo per non esporre direttamente il DB: il trasporto. La maggior parte dei database relazionali, il tipo di cose con cui si parla con JDBC, non sono progettati per l'internet pubblica in generale. La connessione Internet wireless è una fine orribilmente inaffidabile di detta Internet pubblica. La gestione delle eccezioni sarebbe da incubo e probabilmente finiresti per scrivere il retro del livello dei servizi Web all'interno della tua app per evitare di perdere transazioni.
Esistono alcuni tipi più recenti di database che parlano HTTP e potrebbero essere adatti a questo tipo di cose. Tendono anche a presentare modi per inserire il codice dell'applicazione nel database. Potresti voler dare un'occhiata a CouchDb o RavenDb - entrambi sono dbs di documenti con funzionalità di mappa / riduzione che funzionano su json e http, proprio come molti moderni servizi web.