Ho bisogno di alcune buone pratiche o esperienze di team di sviluppatori che hanno dovuto trattare gli stessi problemi che ho al momento =)
La nostra azienda sta sviluppando un software client da anni. La sola e unica dipendenza era di avere un database appropriato. Ad ogni versione (aggiornamento) viene anche aggiornato (incrementale) il database, se necessario. Lo schema delle versioni è ben consolidato e corrisponde alla nostra ideologia.
Ora abbiamo iniziato a sviluppare applicazioni mobili (fungono da client esterni). Alcune osservazioni preliminari alla nostra architettura:
L'interfaccia tra il client mobile e il database (stesso database del client desktop) è un servizio web RESTful. Le versioni di entrambi i client sono indipendenti. Un'unica applicazione viene gestita dal team di sviluppo desktop e la parte mobile viene gestita da un altro team.
Ma non so come gestire il webservice. Dovrebbe essere indipendente (versioning proprio) nonostante stia utilizzando molte librerie condivise che sono gestite dal team di sviluppo del desktop?
Come funziona:
Il client mobile sincronizza i suoi dati di riferimento con il servizio web che interagisce con il database (accesso in sola lettura al database).
Anche i dati utente prodotti sull'applicazione mobile vengono sincronizzati con il servizio web, ma sono scritti su tabelle temporanee persistenti. Viene avviato un lavoro asincrono per provare l'importazione nel database (potrebbe non riuscire in caso di problemi di blocco, autorizzazioni, ....). Se l'importazione fallisce, la stessa procedura di importazione può anche essere avviata sul client desktop (usano la stessa libreria per l'importazione da tabelle temporanee a quelle specifiche)
In generale, ciascuna di queste tre parti potrebbe cambiare (ad esempio bugfix, caratteristiche, miglioramenti delle prestazioni) senza influenzare le altre due. Pertanto ho bisogno di una strategia per implementare ciascuno da solo. Tuttavia molto probabilmente interesserà due su tre.
Dove / quando dovrei controllare se tutti e tre i sistemi sono compatibili? Come dovrei controllare questo? Avere una tabella nel database con ogni singola combinazione possibile di versioni che funzionano insieme?
Se non capisci la mia domanda perché è completamente ambigua, ti prego di farmelo sapere. Non è così facile da descrivere =)