Wenn entschieden wird, dass unser System eine Überholung benötigt, was ist der beste Weg, um darüber zu gehen?

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

  •  01-07-2019
  •  | 
  •  

Frage

Wir sind mainting eine Web-Anwendung, die auf klassischen ASP mit VBScript als primäre Sprache aufgebaut ist. Wir sind uns einig, dass unser Backend (Rahmen, wenn Sie werden) veraltet ist und uns nicht mit den richtigen Werkzeugen zur Verfügung stellen, um vorwärts in eine schnelle Art und Weise zu bewegen. Wir haben ziemlich viel umarmen die aktuellen webMVC Muster, das überall ist, und kann es nicht tun, in einer angemessenen Art und Weise, mit der aktuellen Technologie. Die großen fehlenden Funktionen sind richtige Disposition und Templating mit Vererbung, unter anderem.

Zur Zeit gibt es zwei Wege diskutiert:

  1. Port die bestehende Anwendung zu klassischen ASP JScript verwenden, die wir hoffentlich ermöglichen, um zu .NET MSJscript gehen von dort ohne zu viel Mühe, und schließlich auf der .NET-Plattform am Ende (vorzugsweise das MVC-Zeug bis dahin getan wird , ASP.NET ist nicht viel besser als wir waren auf jetzt sind unserer Meinung). Dies hat sich als sicherer Weg mit weniger Risiko als die nächste Option argumentiert worden, wenn auch es könnte etwas länger dauern.
  2. die Anwendung vollständig neu zu schreiben eine andere Technologie, jetzt der Anführer des Rudels WSGI mit einem benutzerdefinierten Rahmen Python ist, ORM, und eine gute Template-Lösung. Es gibt Spielraum hier auch django und andere vorgefertigte Lösungen. Diese Methode würde hoffentlich die schnellste Lösung, da wir wahrscheinlich eine Beta neben dem eigentlichen Produkt laufen würden, aber es hat für eine große Verschwendung von Zeit, um das Potenzial hat, wenn wir nicht / Sie es nicht richtig machen.

Dies bedeutet nicht, dass unsere Logik weg ist, als das, was wir über die Jahre aufgebaut haben, ziemlich stabil ist, wie nur schwer festgestellt, zu beschäftigen. Es baut auf SQL Server 2005 mit starkem Gebrauch von Stored Procedures und veröffentlichte auf IIS 6, nur für einen wenig mehr Hintergrund.

Nun ist die Frage. Hat jemand eine der beiden Pfade oben genommen? Wenn ja, war es erfolgreich, wie könnte es besser gewesen, etc. Wir suchen nicht viel abweichen von einem dieser zwei Dinge zu tun, aber einige Vorschläge oder andere Lösungen würden möglicherweise hilfreich sein.

War es hilfreich?

Lösung

Sie Ihren Code nicht wegwerfen!

Es ist der einzige schlimmste Fehler, den Sie (auf einer großen Code-Basis) machen. Siehe Dinge sollten Sie niemals tun, Teil 1 .

Sie haben viel Mühe in diesen alten Code investiert und viele Fehler ausgearbeitet. Werfen es weg ist ein klassischer Entwickler Fehler (und ein Ich habe schon viele Male getan). Es macht dich „besser“, wie eine Feder Reinigung fühlen. Aber Sie brauchen keine neue Wohnung und alle neuen Möbel ausstatten Ihr Haus zu kaufen. Sie können zu einer Zeit auf einem Raum arbeiten ... und vielleicht ein paar Dinge brauchen nur eine neue Lackierung. Daher ist dies in dem Refactoring kommt.

Für neue Funktionalität in Ihrer Anwendung, es in C # schreiben und sie von Ihrer klassischen ASP aufrufen . Sie werden als modulare gezwungen werden, wenn Sie diesen neuen Code neu schreiben. Wenn Sie Zeit haben, Refactoring Teile des alten Code in C # als auch, und die Fehler trainieren, wie Sie gehen. Irgendwann werden Sie Ihre App mit allen neuen Code ersetzt haben.

Sie können auch Ihren eigenen Compiler schreiben. Wir schrieben eine für unseren klassischen ASP-App vor langer Zeit uns zur Ausgabe von PHP zu ermöglichen. Es heißt Wasabi und ich denke, es ist der Grund, warum Jeff Atwood dachte Joel Spolsky ging seine Rocker ab. Eigentlich, vielleicht sollten wir es einfach versenden, und dann könnte man diese verwenden.

Es erlaubte uns, unsere gesamte Code-Basis zu wechseln für die nächste Version auf .NET, während nur einen sehr kleinen Teil unserer Quelle neu zu schreiben. Es verursacht auch eine Reihe von Menschen, die uns verrückt zu nennen, aber einen Compiler schreiben, ist nicht so kompliziert, und es gab uns ein hohes Maß an Flexibilität.

Auch wenn diese eine interne einzige Anwendung ist, lassen Sie es einfach. Sie nicht, es neu zu schreiben -. Sie der einzige Kunde sind und wenn die Anforderung ist, müssen Sie es als klassische asp laufen, können Sie diese Anforderung erfüllen können

Andere Tipps

Verwenden Sie dies als eine Gelegenheit ungenutzt Funktionen zu entfernen! geht auf jeden Fall mit der neuen Sprache. Nennen Sie es 2,0. Es wird viel weniger Arbeit sein, die 80% davon neu zu erstellen, dass Sie wirklich brauchen.

Starten Sie durch Ihr Gehirn sauber der gesamten Anwendung abwischen. Setzen Sie sich mit einer Liste ihrer allgemeinen Ziele nach unten, dann entscheiden, welche Funktionen benötigt werden, auf deren Grundlage diejenigen verwendet werden. Dann Redesign es mit diesen Funktionen im Sinne, und bauen.

(Ich liebe Code zu löschen.)

Es funktioniert besser, als würden Sie glauben.

Vor kurzem habe ich einen großen Reverse-Engineering Job auf einer scheußliche alte Sammlung von C-Code. Funktion für Funktion umverteilt ich die Funktionen, die noch relevant in Klassen waren, schrieb Unit-Tests für die Klassen und aufgebaut, was wie eine Ersatz-Anwendung aussah. Es hatte einige der ursprünglichen „logische Fluss“ durch die Klassen und wurden einige Klassen schlecht konzipiert [Meist dies wegen einer Teilmenge der globalen Variablen war, die zu hart war auseinander zu necken.]

Es ging Unit-Tests auf Klassenebene und auf der gesamten Applikationsebene. Die Legacy-Quelle wurde meist als eine Art „-Spezifikation in C“ verwendet, um die wirklich obskuren Geschäftsregeln aufzuzustöbern.

Im vergangenen Jahr schrieb ich einen Projektplan 30 Jahre alte COBOL zu ersetzen. Der Kunde lehnt in Richtung Java. Ich prototypisiert das überarbeitete Datenmodell in Python mit Django als Teil des Planungsaufwand. Ich konnte die Kerngeschäfte Demo, bevor ich die Planung durchgeführt wurde.

Hinweis :. Es schneller war ein Modell und Admin-Interface in Django zu bauen, als das Projekt als Ganze zu planen

Durch die „wir brauchen Java verwenden“ Mentalität, die sich ergebende Projekt wird größer und teurer als die Django Demo beenden. Ohne wirklichen Wert, diese Kosten zu balancieren.

Auch habe ich den gleichen grundlegenden „Prototyp in Django“ für eine VB-Desktop-Anwendung, die eine Web-Anwendung zu werden brauchte. Ich baute das Modell in Django, geladen Altdaten und war in wenigen Wochen und läuft. Früher habe ich den Prototyp arbeitet den Rest des Umstellungsaufwand angeben.

Hinweis : Ich hatte eine funktionierende Django-Implementierung (Modell und Admin-Seiten nur), die ich verwenden, um den Rest des Aufwand zu planen

.

Der beste Teil über diese Art von Prototyping in Django zu tun ist, dass man herumspielen mit dem Modell, Unit-Tests und Admin-Seiten, bis Sie es erhalten rechts . Sobald das richtige Modell, können Sie den Rest Ihrer Zeit Hantieren mit der Benutzeroberfläche verbringen, bis jeder ist glücklich.

Was immer Sie tun, ob Sie es schaffen, einen Plan zu folgen, wo Sie nicht in den Hafen, die Anwendung alle in einem großen Knall. Es ist verlockend, alles wegzuwerfen und von vorne anfangen, aber wenn Sie es schaffen, es nach und nach, die Fehler zu tun, was Sie tun nicht so viel kosten und so viel Panik verursachen.

Vor einem halben Jahr habe ich eine große Web-Anwendung über (glücklicherweise bereits in Python), die einige wichtige architektonische Mängel hatte (Templates und Code gemischt, Code-Duplizierung, nennen Sie es ...).

Mein Plan ist, um schließlich das System reagieren müssen wsgi, aber ich bin noch nicht da. Ich fand die beste Art und Weise, es zu tun, ist in kleinen Schritten. Im Laufe der letzten 6 Monate hat die Wiederverwendung von Code gestiegen und Fortschritt beschleunigt hat.

Allgemeine Grundsätze, die für mich gearbeitet haben:

  1. Wegwerfen Code, der nicht verwendet wird oder auf Kommentar
  2. Wegwerfen alle Kommentare, die nicht geeignet sind,
  3. Definieren Sie eine Ebenenhierarchie (Modelle, Business-Logik, Ansicht / Controller-Logik, Display-Logik, etc.) Ihre Anwendung. Dies hat nicht sehr eindeutig Architektur sein, sondern sollte helfen Sie über die verschiedenen Teile der Anwendung denken und helfen Sie besser Ihren Code zu kategorisieren.
  4. Wenn etwas grob diese Hierarchie verletzt, wird der säumige Code ändern. Bewegen Sie den Code um, recode es an einem anderen Ort, usw. Zur gleichen Zeit den Rest der Anwendung anpassen diesen Code anstelle der alten zu verwenden. Werfen Sie die alten weg, wenn nicht mehr verwendet.
  5. Halten Sie APIs einfach!

Der Fortschritt kann langwierig sein, sollte aber wert sein.

Ich würde JScript nicht empfehlen, da die auf jeden Fall ist die Straße weniger gereist. ASP.NET MVC ist schnell fällig werden, und ich glaube, dass Sie eine Migration auf sie beginnen konnte, gleichzeitig auf dem Rahmen ASP.NET MVC Hochfahren als Abschluss kommt durch. Eine andere Möglichkeit wäre so etwas wie ASP.NET verwenden w / Subsonic oder NHibernate.

Versuchen Sie nicht und geht 2.0 (mehr Funktionen dann existiert zur Zeit oder geplant) statt Ihre neue Plattform mit dem Ziel aufzubauen, die aktuellen Probleme mit der Code-Basis zu lösen (Wartbarkeit / Geschwindigkeit / wtf) und von dort zu gehen.

Ein guter Ort zu beginnen, wenn Sie den Umzug in Python erwägen, ist die Administrator-Schnittstelle in Django neu zu schreiben. Dies wird Ihnen einige der Knicke helfen, ausgearbeitet in Hinblick auf die immer Python und mit IIS ausgeführt wird (oder es zu Apache zu migrieren). Apropos, ich empfehle isapi-wsgi . Es ist bei weitem der einfachste Weg, um aufstehen und laufen mit IIS.

ich mit Michael Pryor und Joel darüber einig, dass es fast immer eine bessere Idee ist Ihre bestehenden Code-Basis weiterhin entwickeln, anstatt neu zu schreiben von Grund auf neu. Es ist in der Regel Möglichkeiten nur neu zu schreiben oder Wieder Faktor bestimmte Komponenten für die Leistung oder Flexibilität.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top