Sto progettando una suite di applicazioni web che hanno le stesse funzionalità di base. Cioè, tutti sapranno come creare e operare sui widget. Le differenze saranno nel pubblico di destinazione e in che modo un utente interagirà con un widget. Essenzialmente, se queste applicazioni fossero sviluppate in modo indipendente, ci sarebbe molto di sforzi duplicati.
Per semplificare questo ho pensato a due soluzioni. Vorrei tutti i tuoi commenti sui pro e contro per ciascuna soluzione e che preferiresti.
-
"Piattaforma" - L'idea è che ci sia un livello di servizio indipendente, un servizio web. Non sarebbe un servizio web, ma semplicemente un back-end per tutte le applicazioni. La piattaforma parlerebbe con le applicazioni tramite la messaggistica o la serializzazione degli oggetti.
Vorrei scrivere la piattaforma con Java, ma l'intenzione sarebbe che le applicazioni potessero essere scritte con qualsiasi framework web come Rails, Django, Flex o semplicemente qualcosa in Java.
La piattaforma dovrebbe astrarre il database, quindi tutte le interazioni con il back-end verrebbero effettuate tramite la piattaforma. Un potenziale problema con questo è che l'aggiornamento della piattaforma comporterà la rimozione di tutte le applicazioni. Ma almeno tutte le applicazioni saranno coerenti per quanto riguarda il back-end.
Mi piace come questo viene tagliato orizzontalmente e che l'applicazione deve solo concentrarsi sul front-end, piuttosto che preoccuparsi di come organizzare il back-end.
-
"Moduli" - L'idea è che scrivo tutto con Java e sviluppi moduli che possano vivere nei loro barattoli. Ogni modulo rappresenterebbe un modulo Guice e ogni applicazione includerebbe solo i moduli che desiderava e crea i propri iniettori.
Questo approccio renderebbe ciascuna applicazione completamente indipendente l'una dall'altra, oltre a condividere un database comune. Quindi, teoricamente, sarebbe molto più semplice implementare un'applicazione in un ambiente diverso senza preoccuparsi della piattaforma. Sarei bloccato in un ambiente linguistico, Java. Anche se JRuby e Jython sarebbero disponibili. Quindi forse non è un problema.
Inoltre, prevedo che è più semplice personalizzare un'applicazione senza eseguire la piattaforma. L'unico problema è che se aggiorno un modulo, vorrei ridistribuire ogni applicazione usando quel modulo. Ciò sarebbe facile con l'integrazione continua, però.
Grazie per il tuo tempo.
Riguardo alla risposta di Gary, ho deciso di adottare un approccio ibrido.
Svilupperò una piattaforma, che sarà il punto di accesso per le applicazioni web a dati e servizi. Quindi modulerò la piattaforma, ma tutti i moduli rimarranno sotto un unico repository con un POM padre. Mentre potrei semplicemente tenerli tutti in un solo JAR, vorrei che la separazione del classpath per scopi di sviluppo, per far pensare me / altri prima di richiedere a un modulo di dipendere da un altro.