Ich bin derzeit einige Arbeit für ein Unternehmen, das eine Legacy-Web-App auf Java Servlets gebaut läuft (das System vor JSPs, obwohl sie jetzt verwenden, wenn sie neue Seiten bauen). Die Codebasis ist ein großes Durcheinander, da sie seit etwa 10 Jahren auf einem veralteten Framework aufgebaut ist. Die Codebasis ist sehr uneinheitlich (die Anwendung wurde im Laufe der Jahre von verschiedenen Personen entwickelt, von denen die meisten nicht mehr hier arbeiten), es gibt kein DRY-Konzept (jede Seite wird im Grunde von Grund auf neu erstellt), viel unleserlichen/kryptischen Code und generell eine sehr inkonsistente Infrastruktur.
Da ich hier gearbeitet habe, habe ich moderne Funktionen hinzugefügt / versucht, die Codebasis ein wenig aufzuräumen. Ich habe einige jQuery hinzugefügt, wo ich ausgesetzt war, ein wenig Sicherheit mit Eingabevalidierungen eingeführt, einige der Module aufgeräumt, um unaufdringliche JavaScript-Prinzipien zu verwenden usw. Ich arbeite hier an neuen Modulen, so dass ich nicht viel von der alten Logik mitbekomme. Ich habe versucht, die besten Praktiken in meine Arbeit unter der aktuellen Infrastruktur einzubringen, aber ich bin gezwungen, eine Menge des alten Codes aufzurufen, um meine Sachen konsistent zu machen.
Sie sind an einem Punkt angelangt, an dem sie nun eine umfassende Aktualisierung des Systems in Erwägung ziehen. Sie wollen die Wartbarkeit der Codebasis verbessern und versuchen, auf eine Art modernes Framework / MVC-Anwendung umzustellen. Ein großer Teil des Systems stammt aus der Zeit vor XHTML, mit Inline-Styling, javascript:function()-Aufrufen, ohne Unit-Tests, vor Hibernate usw. Es gibt eine Mischung aus out.println html-Generierung und dem Aufruf von jsps aus dem Servlet heraus.
Einige Anwendungen, die sie sich angesehen haben, sind Wicket, Struts, Tapestry und möglicherweise Grails. Das Problem ist, dass die Umstellung auf eine dieser Anwendungen eine umfangreiche Neuprogrammierung eines bereits genutzten Systems erfordern könnte, und sie können es sich nicht leisten, noch einmal von vorne anzufangen.
Meine Frage ist: Was wäre der beste Weg, um eine Legacy-Code-Basis wie diese zu einem moderneren Rahmen unter Beibehaltung der bestehenden Geschäftslogik zu migrieren (keinen Sinn in Sachen neu zu schreiben, die getestet wurde und funktioniert).
Einige der Ideen, über die nachgedacht wird, sind:
-
ein hausinternes Templating-System zu entwickeln, das mit der derzeitigen Infrastruktur zusammenarbeitet (um Seiten auf einheitliche Weise zu erstellen)
-
Portierung des Codes auf ein Framework wie Tapestry (Wiederverwendung eines Großteils des alten Codes)
-
das System von Grund auf neu zu schreiben und dabei einen modernen Rahmen zu verwenden, aber die Logik des alten Systems zu übernehmen (wenn möglich)
-
das alte System beibehalten und nur die vorderen Seiten aktualisieren, um ihm ein moderneres Aussehen zu geben (was angesichts von Zeit/Geld usw. das Beste sein könnte)
Was ist der beste Weg, um alten Java-Servlet-Code auf ein modernes Framework zu aktualisieren (mit modernen Praktiken für einfache Wartung, Unit-Tests, DRY), während die Logik intakt bleibt?
jeder Einblick ist willkommen.