come gestire in modo efficace più occorrenze di un'applicazione

5

Ho sviluppato un'applicazione web per un cliente che è vivo per i loro clienti. Recentemente, l'applicazione è stata venduta in modo tale da essere replicata in altri nomi di dominio, quindi ci sono 4+ istanze dell'applicazione che devo sviluppare e mantenere.

Al momento, ogni copia dell'app ha il proprio repository SVN e quando si tratta di apportare modifiche all'applicazione che influenza tutte le istanze, ne aggiorno una e poi utilizzo Beyond Compare per unire le modifiche alle altre copie.

Sarebbe una soluzione migliore per utilizzare i rami svn per mantenere un sistema centrale e per unire le branch secondarie e viceversa per i bug? Ad ogni applicazione possono essere apportate modifiche specifiche del cliente, come logo, colori ecc.

Le filiali sono il modo migliore per andare o continuare ad avere ciascuna nel proprio repository e utilizzare BC per unire dove necessario?

    
posta Gortron 15.12.2010 - 20:09
fonte

3 risposte

4

Naturalmente dipenderà dalle specifiche, ma idealmente vorresti un codice sorgente singolo con estensioni per il codice specifico del client. Ad esempio, è possibile organizzare il codice specifico del client in plug-in come farebbe un sistema di gestione dei contenuti. O utilizzare un sistema di template per GUI personalizzate. Cercherò di evitare di mantenere 4 serie di codice di base se possibile in quanto è solo chiedendo problemi. Soprattutto se da un anno a questa parte ci sono 10 serie di codice quando aggiungi i clienti.

Come altro esempio, la più grande applicazione PHP su cui lavoro ha un'interfaccia amministratore che consente all'amministratore di abilitare o disabilitare funzionalità specifiche. Alcuni sono progettati solo per client singoli, altri sono funzionalità "premium" a cui sono stati aggiornati più clienti. Ma è ancora tutto un codice base. Durante il runtime, controlla in base a chi ha effettuato l'accesso e presenta all'utente funzionalità aggiuntive laddove applicabile.

    
risposta data 15.12.2010 - 20:45
fonte
2

L'approccio tipico è di avere un singolo core, che può quindi essere configurato come necessario in un modulo separato. Per i core semplici, è possibile accontentarsi di if-statement basate su variabili nel modulo di configurazione.

Per i core più avanzati, è necessario essere in grado di fornire codice specifico del cliente che ignori le funzionalità standard. Come esattamente ciò accade (tempo di compilazione, rispetto al tempo di esecuzione) dipende da ciò che è più conveniente per te.

Ma hai un disperato bisogno di consolidare il tuo codice in un unico codice base. Altrimenti, la complessità ti sommergerà rapidamente se avrai più clienti.

    
risposta data 15.12.2010 - 21:55
fonte
1

Controllo della versione distribuita in cui si dispone di un repository separato per ogni istanza e si impegnano a modificarle secondo le necessità.

Il link potrebbe aiutarti a comprenderlo.

Siamo in una situazione simile e non è qualcosa che Subversion fa per niente. Stiamo guardando Mercurial come alternativa.

Se non si tratta di un'opzione a breve termine, è necessario separare ogni istanza in codice di base (che può essere condiviso) e codice che non può. Ciò minimizza almeno il codice specifico del cliente e riduce la scala del problema.

    
risposta data 15.12.2010 - 20:16
fonte

Leggi altre domande sui tag