Attualmente sto lavorando per un'azienda che esegue un'app web legacy costruita su Java Servlet (il sistema è pre-data JSP, anche se ora li usano quando costruiscono nuove pagine). La base di codice è un grande caos confuso come i suoi circa 10 anni di costruzione in cima a un quadro obsoleto. Hanno poca coerenza nella base di codice (l'app è stata sviluppata da varie persone nel corso degli anni, la maggior parte delle quali non funziona più qui), nessun concetto di DRY (ogni pagina è fondamentalmente creata da zero) un sacco di illeggibile/criptico codice e, in generale, un'infrastruttura molto incoerente.Raccomandazioni per la migrazione di un'app Web legacy in un framework moderno
Come ho lavorato qui, ho aggiunto funzionalità moderne/cercando di ripulire un po 'il codice base. Ho aggiunto un po 'di jQuery a dove sono stato esposto, introdotto un po' di sicurezza con le convalide degli input, ripulito alcuni dei moduli per utilizzare principi JavaScript non invadenti, ecc. Il mio lavoro qui è sui nuovi moduli quindi non sono esposto a molto del vecchio logica. Ho cercato di introdurre le migliori pratiche per tutto il mio lavoro sotto la loro attuale infrastruttura, ma sono costretto a chiamare molto del loro vecchio codice per rendere le mie cose coerenti.
Hanno raggiunto un punto in cui stanno ora considerando un enorme aggiornamento del sistema. Vogliono migliorare la manutenibilità della base di codice e tentare di passare a una sorta di applicazione di tipo framework/MVC moderna. Gran parte del sistema precede XHTML con markup stilistico in linea, chiamate javascript: function(), nessun test unitario, precede Hibernate, ecc. Esiste un mix di generazione html out.println e chiamate jsp dall'interno del servlet.
Alcune app che hanno visto includono Wicket, Struts, Tapestry e possibilmente Grails. Il problema è che il passaggio a uno di questi potrebbe richiedere un'enorme riscrittura di un sistema già in uso e che non possono permettersi di ricominciare.
La mia domanda è: quale sarebbe il modo migliore per migrare un codice legacy come questo in un framework più moderno mantenendo la logica aziendale esistente (non ha senso riscrivere materiale che è stato testato e funziona).
Alcune delle idee essere pensato includono:
scrive un sistema di template casa che avrebbe funzionato con la loro attuale infrastruttura (generare pagine in modo coerente)
codice del porto ad un quadro, come arazzo (riutilizzo di un sacco di loro vecchio codice)
sistema di riscrittura da zero utilizzando un quadro moderno, ma la copia sulla logica da vecchio sistema (se possibile)
mantenere il vecchio sistema, come è e basta aggiornare le pagine di front-end per dare un aspetto più moderno (potrebbe essere migliore dato tempo/denaro, ecc)
qual è il modo migliore per aggiornare l'eredità Il codice Java Servlet in un framework moderno (usando pratiche moderne per una facile manutenzione, unit test, DRY) mantenendo intatta la logica?
qualsiasi approfondimento è benvenuto.