Se si è deciso che il nostro sistema ha bisogno di una revisione, qual è il modo migliore per andare su di esso?

StackOverflow https://stackoverflow.com/questions/87522

  •  01-07-2019
  •  | 
  •  

Domanda

Siamo mainting una applicazione web basata su Classic ASP con VBScript come lingua principale.Siamo d'accordo che il nostro backend (quadro se) è datata e non ci forniscono gli strumenti adatti per andare avanti in un modo rapido.Abbiamo praticamente abbracciato la corrente webMVC modello che è tutto il luogo, e non può farlo, in un modo ragionevole, con la tecnologia attuale.La grande funzionalità mancanti sono propri di spedizione e di templating con ereditarietà, tra gli altri.

Attualmente ci sono due percorsi che sono oggetto di discussione:

  1. Porta l'applicazione ASP Classico utilizzo di JScript, che ci permetterà di spera di andare da lì .NET MSJscript, senza troppe difficoltà, e alla fine finisce sul .Piattaforma rete (preferibilmente MVC cosa sarà fatto, ASP.NET non è molto meglio che ci sono ora, nelle nostre opinioni).Questo è stato sostenuto come il percorso più sicuro e con meno rischio che l'opzione successiva, anche se potrebbe richiedere un po ' di più.
  2. Completamente riscrivere l'applicazione utilizzando altre tecnologie, ora il leader del pack è di Python WSGI con un costume di framework ORM, e un buon template soluzione.C'è spazio di manovra qui anche per django e altre soluzioni precostituite.Questo metodo, si spera, la soluzione più veloce, come si sarebbe probabilmente eseguire una beta, accanto al prodotto reale, ma ha il potenziale per un grande spreco di tempo se non si può/non si ottiene di destra.

Questo non significa che la nostra logica è andato, come quello che abbiamo costruito nel corso degli anni è abbastanza stabile, come si è notato solo difficile da affrontare.È costruito su SQL Server 2005 con pesante uso di stored procedure e pubblicato su IIS 6, solo per un po ' di più lo sfondo.

Ora, la domanda.Qualcuno ha preso uno dei due percorsi di cui sopra?Se è così, è stato di successo, come potrebbe essere migliore, etc.Non siamo in cerca di discostarsi molto da fare una di queste due cose, ma alcuni suggerimenti o altre soluzioni potenzialmente utili.

È stato utile?

Soluzione

Non buttate il vostro codice!

E ' l'unico errore peggiore che si può fare (su un grande codebase).Vedere Cose Da Non Fare Mai, Parte 1.

Avete investito un sacco di sforzo in quel vecchio codice e risolto molti bug.Buttarlo via è un classico sviluppatore errore (e l'ho fatto molte volte).Ti fa sentire "meglio", come le pulizie di primavera.Ma non c'è bisogno di acquistare un nuovo appartamento e tutti i mobili nuovi per vestire la vostra casa.Si può lavorare su una stanza alla volta...e forse alcune cose solo bisogno di una nuova vernice.Quindi, questo è dove il refactoring è disponibile in.

Per le nuove funzionalità dell'app, scrivere in C# e chiamata dal vostro classic ASP.Sarete costretti a essere modulare per la riscrittura di questo nuovo codice.Quando hai tempo, refactor parti del vecchio codice in C# e, e lavorare fuori i bug, come si va.Alla fine, avrete sostituito l'app con il nuovo codice.

Si potrebbe anche scrivere il proprio compilatore.Abbiamo scritto una classic ASP app tempo fa ci consentono di output di PHP.Si chiama Wasabi e penso che è il motivo per cui Jeff Atwood pensiero Joel Spolsky è andato fuori del suo rocker.In realtà, forse dovremmo nave, e quindi si potrebbe utilizzare.

Questo ci ha permesso di passare tutta la nostra base di codice .NETTO per il prossimo rilascio, mentre solo la riscrittura di una parte molto piccola della nostra origine.Essa ha anche causato un sacco di persone ci chiamano pazzo, ma scrivere un compilatore non è così complicato, e ci ha dato un sacco di flessibilità.

Anche se questo è un interno solo app, basta lasciare.Non riscrivere i clienti e se il requisito è necessario eseguirlo come asp classico, è in grado di soddisfare tale requisito.

Altri suggerimenti

Utilizzare questo come un'opportunità per rimuovere inutilizzati caratteristiche!Sicuramente con la nuova lingua.Chiamare 2.0.Sarà molto meno lavoro per ricostruire il 80% di esso che si ha realmente bisogno.

Iniziare pulendo il vostro cervello pulita di tutta l'applicazione.Sedersi con un elenco dei suoi obiettivi generali, e poi decidere quali caratteristiche sono necessarie sulla base della quale sono utilizzati.Quindi riprogettare con queste caratteristiche in mente, e costruire.

(Mi piace elimina code.)

Funziona meglio di quanto si potesse credere.

Di recente ho fatto un grande reverse-engineering del lavoro su una orribile vecchia collezione di C codice.Funzione funzione che ho riallocare le funzioni che erano ancora rilevante in classi, ha scritto unit test per le classi, e si è costruito quello che sembrava un programma sostitutivo.Ha avuto alcuni degli originali logica del "flusso" attraverso le classi, e alcune classi sono state progettate male [per lo più questo è stato a causa di un sottoinsieme di variabili globali che era troppo difficile da prendere in giro a parte.]

Passò test di unità a livello di classe e il livello di applicazione.L'eredità di origine è stato usato principalmente come una sorta di "specifiche" in C" di ferret veramente oscuro delle regole di business.

L'anno scorso ho scritto un piano di progetto per la sostituzione di 30-anno-vecchio COBOL.Il cliente si era sporto verso di Java.Ho realizzato il prototipo di la revisione del modello di dati in Python usando Django come parte dello sforzo di pianificazione.Potrei demo il core transazioni prima che mi è stato fatto di pianificazione.

Nota:E ' stato più veloce per costruire un modello e l'interfaccia di amministrazione in Django di pianificare l'intero progetto.

A causa della "abbiamo bisogno di usare Java" mentalità, il progetto risultante sarà più grande e più costoso di finitura Django demo.Con nessun valore reale di equilibrio che di costo.

Inoltre, ho fatto la stessa base "prototipo in Django" per un VB applicazione desktop che è necessario per diventare un applicazione web.Ho costruito il modello in Django, caricato di dati legacy, ed è stato fino e in esecuzione in un paio di settimane.Ho usato quel prototipo funzionante per specificare il resto della conversione sforzo.

Nota:Ho avuto un lavoro Django attuazione (modello e admin solo pagine) che ho utilizzato per pianificare il resto del progetto.

La parte migliore di fare questo tipo di prototipazione in Django è che si può pasticciare con il modello di test di unità e pagine di amministrazione fino a quando non ottiene a destra.Una volta che il modello è di destra, è possibile trascorrere il resto del tempo a cazzeggiare con l'interfaccia utente fino a quando siamo tutti felici.

Qualunque cosa tu faccia, vedere se si riesce a seguire un piano in cui non si dispone di porta l'applicazione all in one big bang.Si è tentati di buttare via tutto e ricominciare da zero, ma se si riesce a farlo gradualmente gli errori che si fanno, non costano tanto e causare così tanto panico.

Un anno e mezzo fa ho preso una applicazione web di grandi dimensioni (per fortuna già in Python) che ha avuto alcune importanti architettonico carenze (modelli e codice mista, la duplicazione del codice, è il nome...).

Il mio piano è quello di avere finalmente il sistema di rispondere alle WSGI, ma io non ci sono ancora.Ho trovato il modo migliore per farlo, a piccoli passi.Negli ultimi 6 mesi, il riutilizzo del codice è salito, e il progresso si è accelerato.

I principi generali che hanno lavorato per me:

  1. Buttare via codice non utilizzato o commentate
  2. Buttare via tutti i commenti che non sono utili
  3. Definire un la gerarchia dei livelli (modelli, la logica di business view/controller la logica, la logica di visualizzazione, etc.) di applicazione.Questo non è molto chiaro taglio di architettura, ma piuttosto dovrebbe aiutano a riflettere sulle varie parti dell'applicazione e aiuterà a meglio classificare il tuo codice.
  4. Se qualcosa di grossolanamente viola questa gerarchia, modificare il codice che causano problemi.Spostare il codice di tutto, riscrivere in un altro luogo, etc.Allo stesso tempo, regolare il resto della vostra applicazione per l'utilizzo di questo codice al posto di quello vecchio.Butta il vecchio, se non viene più utilizzato.
  5. Mantenere le Api semplice!

Il progresso può essere faticoso e lento, ma dovrebbe essere la pena.

Mi raccomando, JScript che è sicuramente la strada meno percorsa.ASP.NET MVC è rapida maturazione, e penso che si potrebbe iniziare una migrazione ad esso, contemporaneamente, incrementando il ASP.NET MVC framework come la sua finalizzazione passa attraverso.Un'altra opzione sarebbe quella di utilizzare qualcosa di simile ASP.NET w/Subsonico o NHibernate.

Non provare ad andare 2.0 ( caratteristiche attualmente esistente o prevista) invece di costruire la vostra nuova piattaforma con l'intento di risolvere i problemi con il codice di base (manutenibilità/velocità/wtf) e passare da lì.

Un buon posto per iniziare se state pensando di passare a Python è riscrivere la vostra interfaccia di amministrazione in Django.Questo vi aiuterà a ottenere alcuni dei kinks funzionato in termini di ottenere Python e con IIS (o per la migrazione ad Apache).A proposito, mi raccomando isapi-wsgi.E ' di gran lunga il modo più semplice per ottenere installato e funzionante con IIS.

Sono d'accordo con Michael Pryor e Joel, che è quasi sempre una migliore idea di continuare ad evolvere il proprio codice di base esistente, piuttosto che ri-scrittura da zero.Normalmente ci sono opportunità per ri-scrivere o ri-fattore di alcune componenti per prestazioni o di flessibilità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top