Frage

Ich muss eine bedeutende Entwicklung in einem großen, alten, mit Spaghetti durchsetzten ASP-System durchführen.Ich habe mich schon lange von ASP getrennt und meine Energie auf die Rails-Entwicklung konzentriert.

Ein grundlegender Schritt, den ich unternommen habe, besteht darin, Seiten in Subs und Funktionen mit aussagekräftigen Namen umzugestalten, sodass es zumindest am Anfang der Datei leicht zu verstehen ist, was im Allgemeinen vor sich geht.

Gibt es ein lohnenswertes MVC-Framework für ASP?Oder eine Best Practice, wie man zumindest Geschäftslogik aus den Ansichten herausholt?(Ich erinnere mich, dass ich damals viele Includes gemacht habe – geht das immer noch so?)

Ich würde gerne auch einige Unit-Tests für die Geschäftslogik durchführen, aber vielleicht verlange ich zu viel?

Aktualisieren:

Es gibt über 200 ASP-Skripte im Projekt, einige tausend Zeilen lang ;) UGH!

Wir entscheiden uns vielleicht für das „große Umschreiben“, aber bis dahin, wenn ich eine Seite wechsle, möchte ich etwas mehr Zeit damit verbringen, den Spaghetti aufzuräumen.

War es hilfreich?

Lösung

Annahmen

Die Dokumentation für das Classic ASP-System ist eher dürftig.

Das Management strebt keine Neufassung an.

Da Sie Ruby on Rails verwenden, ist Ihr (VB/C#) ASP.NET bestenfalls passabel.

Meine Erfahrung

Auch ich habe ein klassisches ASP-System geerbt, das von ehemaligen Excel-VBA-Typen willkürlich zusammengebastelt wurde.Davon gab es eine Menge <font size=3>crap</font> (und manchmal fehlen schließende Tags;Argggh!).Im Laufe von 2,5 Jahren habe ich ein Sicherheitssystem, eine gemeinsame Bibliothek, CSS+XHTML hinzugefügt und konnte das Ding dazu zwingen, xhtml1.1 zu validieren (leider ohne richtigen Mime-Typ) und ein ziemlich robustes und Ajaxy-Berichtssystem aufgebaut, das derzeit existiert Wird täglich von 80 Benutzern verwendet.

Ich habe jEdit mit cTags verwendet (wie erwähnt von jammen oben) und eine Reihe anderer Plugins.

Mein RatVersuchen Sie, eine Master-Include-Datei zu erstellen, aus der Sie alle häufig verwendeten Dinge importieren können.Dinge wie Anmelden/Abmelden, Datenbankzugriff, Webdienste, Javascript-Bibliotheken usw.

Verwenden Sie Klassen.Sie sind ultra-primitiv (keine Vererbung), aber wie Jamting sagte, können sie praktisch sein.

Die Skripte richtig einrücken.

Kommentar

Schreiben Sie ein externes Architekturdokument.Ich persönlich verwende LyX, weil es hirntot ist, ein schön formatiertes PDF zu erstellen, aber Sie können alles verwenden, was Sie möchten.Wenn Sie ein Wiki verwenden, installieren Sie das Graphviz-Add-In und verwenden Sie es.Es ist super einfach, schnell Diagramme zu erstellen, die leicht geändert werden können.

Da ich keine Ahnung habe, wie umfangreich die Verbesserungen sein müssen, schlage ich vor, dass ein gutes Dokument zur Architektur auf hoher bis mittlerer Ebene bei der Planung der Verbesserungen sehr hilfreich sein wird.

Bei den Geschäftslogik-Unit-Tests habe ich festgestellt, dass das Einzige, was funktioniert, das Einrichten eines XML-RPC-Listeners in ASP ist, der die Hauptbibliothek importiert und die Funktionen (allerdings keine Unterroutinen) in einem der Sub-Includes der Hauptbibliothek verfügbar macht, und dann Erstellen Sie separat ein Unit-Test-System in einer Sprache mit besserer Unterstützung für die Dinge, die die ASP-Funktionen über xml-rpc aufrufen.Ich verwende Python, aber ich denke, Ruby sollte den Zweck erfüllen.(Ist das sinnvoll?).Das Coole daran ist, dass die Person, die den Unit-Test-Teil der Software schreibt, sich nicht einmal den ASP-Code ansehen muss, solange sie über anständige Beschreibungen der aufzurufenden Funktionen verfügt, sodass sie jemand neben Ihnen sein kann.

Es gibt ein Projekt namens aspunit bei SourceForge, aber die letzte Veröffentlichung stammt aus dem Jahr 2004 und ist als inaktiv markiert.Ich habe es nie benutzt, aber es ist reines VBScript.Ein flüchtiger Blick auf den Code zeigt mir, dass es so aussieht, als ob die Autoren wussten, was sie taten.

Wenn Sie schließlich Hilfe benötigen, habe ich die Möglichkeit, vertraglich vereinbarte Telearbeitsarbeiten zu übernehmen (vielleicht maximal 8 Stunden/Woche).Folgen Sie dem Linkpfad für Kontaktinformationen.

Viel Glück!HTH.

Andere Tipps

Da ein komplettes Neuschreiben eines funktionierenden Systems sehr gefährlich sein kann, kann ich Ihnen nur einen kleinen Tipp geben:Richten Sie üppige Tags, Ctags, für Ihr Projekt ein.Auf diese Weise können Sie einfach zur Definition einer Funktion und eines Subs springen, was meiner Meinung nach sehr hilfreich ist.

Über die Trennung von Logik und „Ansichten“.VBScript unterstützt eine Art OO mit Klassen.Ich neige dazu, Klassen zu schreiben, die die Logik ausführen, die ich auf der Asp-Seite einfüge, die als „Ansicht“ fungiert.Dann verbinde ich die Ansicht mit der Klasse wie Benutzername:<%= MyAccount.UserName %>.Die MyAccount-Klasse kann auch Methoden wie die folgenden haben:MyAccount.Login() und so weiter.

Irgendwie primitiv, aber Sie können zumindest einen Teil des Codes einkapseln und ihn vor dem HTML verbergen.

Mein Rat wäre, das Refactoring fortzusetzen, klassisches ASP unterstützt Klassen, sodass Sie in der Lage sein sollten, alles außer dem Anzeigecode in enthaltene ASP-Dateien zu verschieben, die nur Klassen enthalten.In diesem Artikel finden Sie Einzelheiten zum Wechsel vom altmodischen ASP zu ASP.NET

ASP umgestalten

Was die zukünftige Ausrichtung betrifft, würde ich nicht auf ASP.NET-Webformulare abzielen, sondern stattdessen auf das neue MVC-Framework von Microsoft (ein Add-on zu ASP.NET) setzen. Die Migration vom klassischen ASP dorthin wird viel einfacher sein.

ich benutze ASPUnit für Unit-Tests einiger unserer klassischen ASPs und finde es hilfreich.Es mag alt sein, aber ASP ist es auch.Es ist einfach, aber es funktioniert und Sie können es bei Bedarf anpassen oder erweitern.

Habe ich auch gefunden Effektives Arbeiten mit Legacy-Code von Michael Feathers als hilfreicher Leitfaden für die Suche nach Möglichkeiten, einen Teil dieses alten Codes zu testen.

Das Einschließen von Dateien kann hilfreich sein, solange Sie es einfach halten.Irgendwann habe ich versucht, für jede Klasse ein Include zu erstellen, aber das hat nicht so gut geklappt.Ich mag es, ein paar Haupt-Includes mit gemeinsamer Geschäftslogik zu haben, und bei komplizierten Seiten manchmal ein Include mit Logik für jede dieser Seiten.Ich nehme an, Sie könnten MVC mit einem ähnlichen Setup ausführen.

Gibt es eine Chance, dass Sie von ASP zu ASP.Net wechseln könnten?Oder möchten Sie es im klassischen ASP belassen, es aber nur bereinigen?Wenn möglich, würde ich empfehlen, so weit wie möglich auf .Net umzusteigen.Es sieht so aus, als ob Sie sowieso viel Code neu schreiben/reorganisieren müssten, sodass der Wechsel zu .Net möglicherweise kein großer zusätzlicher Aufwand ist.

Vermutlich hat jemand anderes den Großteil oder das gesamte System geschrieben, das Sie jetzt pflegen.Achten Sie auf die üblichen schlechten Angewohnheiten (wiederholter Code, zu weitreichende Variablen, verschachtelte if-Anweisungen usw.) und führen Sie die Umgestaltung wie bei jeder anderen Sprache durch.Halten Sie Ausschau nach wiederkehrenden Dingen in derselben Datei oder in verschiedenen Dateien und abstrahieren Sie sie in Funktionen.

Wenn der Code von verschiedenen Personen geschrieben/gepflegt wurde, kann es zu Problemen mit einem inkonsistenten Codierungsstil kommen.Ich finde, dass es einfacher ist, Dinge zu erkennen, die umgestaltet werden können, wenn man den Code wieder in Einklang bringt.

„Tausende Zeilen lang“ lässt mich vermuten, dass es auch Situationen geben könnte, in denen lose zusammenhängende Dinge auf derselben Seite angezeigt werden.Auch hier möchten Sie sie in separate Unterprogramme abstrahieren.

Irgendwann möchten Sie Objekte schreiben, um Dinge wie Datenbankkonnektivität zu kapseln, aber es wird eine Weile dauern, bis Sie es schaffen.

Das ist sehr alt, aber ich konnte nicht widerstehen, meine Anmerkungen hinzuzufügen.Wenn Sie neu schreiben müssen und weiterhin klassisches ASP verwenden müssen:

  • Verwenden Sie JScript!viel leistungsfähiger, Sie erhalten Vererbung und es gibt einige gute Nebenvorteile, wie z. B. die Verwendung derselben Methoden für die serverseitige Validierung, die Sie für die clientseitige Validierung verwenden
  • Sie können absolut MVC ausführen – ich habe ein MVC-Framework geschrieben, und es waren nicht so viele Codezeilen
  • Mit etwas Aufwand können Sie Ihre Modellklassen auch automatisch generieren.Ich habe einen Code dafür, der ganz gut funktioniert hat
  • Stellen Sie sicher, dass Sie parametrisierte Abfragen durchführen und stets getrennte Datensätze zurückgeben

Die Praktiken des Softwareentwicklungsprojektmanagements deuten darauf hin, dass Software wie diese eingestellt werden muss.

Ich weiß, wie schwer es ist, das Richtige zu tun, umso mehr, wenn der verantwortliche Manager alles weiß und vor allem Angst hat, außer vor dem Schlechtesten.

Aber dennoch.Es ist notwendig, mit der Entwicklung einer neuen Software zu beginnen.Es ist einfach unmöglich, dieses System für immer aufrechtzuerhalten, und je länger man auf die Einstellung wartet, desto schlimmer.

Wenn Sie nicht über eine ordnungsgemäße Spezifikations-/Anforderungsdokumentation verfügen (ich glaube, keine ASP-Software auf der Welt verfügt über eine solche, wenn man die Noobtry-Fähigkeiten dieser Programmierer berücksichtigt), benötigen Sie sowohl eine Gruppe von Benutzern, die die Softwarefunktionen kennen, als auch einen entsprechenden Manager Verantwortlich für die Validierung der Anforderungen.Sie müssen jede Funktion überprüfen und ihre Anforderungen dokumentieren.

Während dieses Prozesses erfahren Sie mehr über die Software und ihr Geschäft.Sobald Sie über genügend Informationen verfügen, können Sie mit der Entwicklung eines neuen beginnen.

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