OK, farò l'assurdo presupposto che con "senza riscrivere" intendi "senza ricominciare". Perché una volta che il tuo progetto si qualifica come MVC, ne avrai riscritto una parte significativa.
Non ti mentirò, sarà dura. Ma è fattibile.
Letteratura
La prima cosa che ti suggerirei sarebbe di prendere una copia di Michael Feather Lavorare con il codice legacy . È pieno di ottimi consigli su come gestire e lavorare con il tipo di codice che descrivi. Dovresti anche prendere Martin Fowler Refactoring e Joshua Kerievsky Refactoring to Pattern . Queste tecniche saranno molto utili per cambiare il tuo codice.
Come lavorare sul problema
Alcuni punti importanti mentre lavori sul tuo codice sono
- Evita di mordere più di quanto puoi masticare
- Mantieni sempre il tuo codice funzionante
Per gestire il primo punto, assicurati di cambiare sempre una piccola parte del tuo codice alla volta. Per il secondo, assicurati di avere un test di accettazione che assicuri di non infrangere il codice mentre lo cambi.
La procedura che ho usato io durante la rielaborazione del vecchio file JSP come il tuo codice era la seguente
- Isolare una funzionalità specifica per riscrivere
- Scrivi alcuni test di accettazione che controllano il comportamento (il selenio sarà uno strumento molto valido)
- Ora la parte divertente. Crea una nuova classe vuota e una UnitTest Suite
- Leggi il codice, trova la parte più semplice del codice che puoi inserire nella tua classe
- Prova la piccola affermazione
- Inserisci il codice dell'istruzione nella tua classe
- Sostituisci l'istruzione con una chiamata alla tua classe
- Rifatta la tua classe per renderla leggibile, non aver paura di creare nuove classi se vedi emergere più preoccupazioni. Non dimenticare di refactoring anche il tuo test!
- Vai a 4 e continua fino a quando tutto il codice è nelle tue classi testate
Ora, mentre estrai il codice procedurale nella tua classe, inizierai a vedere il pattern emerge. La duplicazione diventerà ovvia (il vecchio codice come questo tende ad essere piuttosto copia e incolla). Reingegnerizza la tua classe per riflettere la tua nuova comprensione del problema.
Una cosa che potresti notare è che mentre vai, inizierai ad andare molto più veloce, perché il codice incollato su una copia così prevalente in quelle applicazioni sarà già in una delle tue classi refactored. Quindi incontrerai il codice scritto da un'altra persona e sarai di nuovo lento. È normale.
Non esitare a fermarti di tanto in tanto e sposta il codice nella classe refactored per creare un'architettura più gradevole. Mentre vai, potresti finire con un framework MVCish. Oppure potresti aver a volte adattato il tuo problema a modo suo. La cosa bella è che avrai una bella suite di test per coprirti come fai tu.
Ora, naturalmente, il problema è che vorrete aggiungere funzionalità all'applicazione prima possibile. Puoi usare quello. Quando è necessario aggiungere qualcosa a una parte di codice, eseguire prima il refactoring per quella parte di codice. In questo modo, migliorerai lentamente il design mentre aggiungi funzionalità. Sarà più lento ma a lungo andare andrai più veloce perché il codice sarà più facile da mantenere.
Ti auguro buona fortuna