6 Stimmen

Empfehlungen für die Migration einer Legacy-Webanwendung auf ein modernes Framework

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.

3voto

Morendil Punkte 3830

Refactor die Hölle aus ihm heraus, arbeiten in Richtung einer konsistenten Stil des Designs, als Vorstufe zu portieren es über den Rahmen am nächsten im Geiste, was auch immer, dass Stil endet zu sein.

Mit "Refactor" meine ich - Tests an strategischen Stellen einführen, sowohl Unit- als auch Funktionstests, und wie verrückt daran arbeiten, Doppelarbeit zu reduzieren, indem man sich auf diese Tests stützt.

2voto

matt b Punkte 135206

Ich habe vor einigen Monaten eine sehr ähnliche Frage gestellt, einige der Antworten könnten für Sie nützlich sein:

Was ist der beste Weg, um eine bestehende unordentliche Webapp zu elegantem MVC zu migrieren?

1voto

eljenso Punkte 16300

Es gibt keine eindeutige Antwort auf diese Frage, aber mein wichtigster Tipp wäre, zunächst sich über das Thema informieren . Lesen Sie Bücher von Leuten, die wissen, wovon sie sprechen.

Zum Beispiel, Code Complete (Steve McConnell), Kap. 24 Refactoring.

  • Speichern Sie den Code, mit dem Sie beginnen

  • Refactorings klein halten

  • Ein Refactoring nach dem anderen durchführen

  • Refaktorieren Sie, wenn Sie eine Routine oder Klasse hinzufügen oder einen Fehler beheben

  • Definieren Sie eine Schnittstelle zwischen sauberem und hässlichem Code

  • ...

Es gibt viele weitere gedruckte und Online-Ressourcen, die Sie nutzen können. Wenn Sie anschließend eine spezifischere Frage haben, können Sie Websites wie SO nutzen, um eine nützlichere Antwort als diese zu erhalten.

0voto

Eric Petroelje Punkte 58501

Der beste Weg: Verwenden Sie die vorhandene Anwendung als funktionale Spezifikation und bauen Sie die neue Anwendung von Grund auf neu auf (mit möglicher Wiederverwendung durch Ausschneiden und Einfügen oder tatsächlicher Wiederverwendung von Klassen, wo dies sinnvoll ist).

Meiner Erfahrung nach führt der Versuch, eine schlecht geschriebene Legacy-Anwendung in ein neues Framework zu zwängen, oder der Versuch, schlechten Code in guten Code zu "verpacken", nur dazu, dass die Wartung auf lange Sicht noch schwieriger und teurer wird.

0voto

Chii Punkte 14068

Das ist nur meine Meinung, denn ich denke, dass die Leute für diese Frage teure Berater bezahlen, um sie zu klären (und in der Regel am Ende nur Geld verschwenden! siehe thedailywtf.com für Beispiele).

Ich denke, dass es sich nicht lohnt, die App komplett neu zu schreiben, da man während des Prozesses des Umschreibens auch die ursprüngliche App* pflegen muss und somit ein bewegliches Ziel hat. Der bessere Weg ist es, die Codeschulden mit dem Refactoring zu tilgen - d.h. es wird den doppelten, dreifachen oder sogar zehnfachen Aufwand benötigen, um ein einfaches Feature zu implementieren, einfach weil es auf eine nette Art und Weise zu tun, haufenweise Refactoring erfordert. aber dieser Aufwand ist notwendig, da die Schulden in dieser App hoch sind und schließlich irgendwie bezahlt werden müssen.

es mag weh tun, aber gute Medizin tut weh.

  • Wenn Sie ein gutes Stück Zeit, um die Neuschreibung zu tun, d.h., die ursprüngliche app ist eingefroren und nicht gepflegt (nicht einmal Bug-Fixes), dann könnte es als eine komplette Neuschreibung in was auch immer Rahmen Sie für geeignet halten. aber ich bezweifle stark, dass dies der Fall in jeder Institution sein wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X