Forcella applicazione Web (Spring, JSF), come riutilizzare il codice esistente per i sottoprogetti?

2

la mia domanda sarà un po 'filosofica e "orientata all'architettura" quindi portami con me.

In questo momento abbiamo un'applicazione web Java esistente basata su Spring e JSF (facelets) con Maven. Questi sono fondamentalmente i nostri strumenti che limitano il nostro ambito di possibili soluzioni.

Ora al punto. Dobbiamo implementare un fork di questa applicazione che verrà eseguita su domini diversi per "consumatori finali" diversi e implementare alcune richieste di modifica per entrambe le versioni, ma la base di codice di queste versioni sarà probabilmente sempre ~ 90% uguale . Le stesse richieste di modifica possono essere definite per l'implementazione in entrambe le versioni simultaneamente, ma potrebbero venire anche richieste di modifica separate solo per la versione scelta. Non abbiamo alcun controllo su quali richieste di modifica potrebbero verificarsi in seguito nel progetto (ma ce ne stiamo aspettando parecchie). Le differenze di funzionalità possono verificarsi sia su bean che sulla vista dell'applicazione.

Non vogliamo creare 2 progetti completamente separati poiché le modifiche all'implementazione potrebbero a volte significare implementarle due volte. IL GRANDE NUMERO È che ci aspettiamo di avere ancora più forche in futuro in modo che lo sforzo possa moltiplicarsi ulteriormente.

La domanda è quali modi di controllo o modelli architettonici possiamo introdurre per promuovere una migliore sostenibilità dei nostri progetti. Una soluzione potrebbe essere ad esempio:

  • utilizzando i profili Spring per iniettare componenti adeguati in base all'attuale fork of application e completamente separando l'implementazione della vista (xhtml).

In sintesi, stiamo cercando il modo migliore per implementare modifiche a livello di applicazione che possono essere isolate e attivate solo in base a una variabile di contesto (come propagarla ovunque?).

Ogni input, idea o nuova prospettiva è apprezzato.

    
posta Jan Mathauser 06.02.2013 - 18:08
fonte

2 risposte

1

Il tuo problema è uno di come supportare una linea di prodotti piuttosto che un singolo prodotto. Fortunatamente non sei la prima persona ad avere questo problema. C'è una grande comunità di persone che lavorano in questo settore, sia persone industriali che accademiche.

Se cerchi "linee di prodotti software" tramite il tuo motore di ricerca preferito, troverai molti siti, libri e altre risorse.

Esistono vari pattern, che risalgono a GoF, che consentono di collegare la variazione a un progetto in modo controllato (viene subito a mente una strategia che consente implementazioni intercambiabili di una funzione). Tuttavia, hai bisogno di più di un sacco di modifiche individuali: hai bisogno di configurazioni del tuo prodotto per clienti particolari che combinano insieme un numero di variazioni. È qui che entra in gioco il pensiero della community della linea di prodotti (punti di variazione e configurazioni di prodotto in particolare). Come dici tu puoi usare tecnologie come i profili Spring per implementare questo, ma per evitare un pasticcio onnipotente, devi avere un modello chiaro di ciò che stai cercando di ottenere per iniziare.

    
risposta data 07.02.2013 - 23:46
fonte
0

Devi esaminare le tecniche multi-tenant, incluso

  • partizionamento del db per consentire più client o db-per-client
  • compositing della tua app, utilizzando componenti commutabili
risposta data 09.04.2013 - 17:22
fonte

Leggi altre domande sui tag