Frage

Ich habe eine große Web-Anwendung in Perl-CGI ausgeführt wird. Es läuft ok, es ist gut geschrieben, aber, wie es in der Vergangenheit getan wurde, die ganze html sind hartcodiert in den CGI-Anrufe definiert, so wie man sich vorstellen kann, ist es schwer zu mantain, zu verbessern und etc. So, jetzt würde ich anfangen möchte einige Templating und integrieren mit einem Rahmen (Katalysator oder CGI :: Anwendung) hinzuzufügen. Meine Frage ist: Jemand hat hier eine Erfahrung wie das? Es gibt keine Dinge, die ich achten muss? Ich bin mir bewusst, dass mit beiden Frameworks i nativen CGI-Skripte ausführen kann, es ist so gut, weil ich sowohl (CGI nativen ad „frameworked“ Code) ausführen kann zusammen ohne Trauma. Irgendwelche Tipps?

War es hilfreich?

Lösung

Write-Tests zuerst (zum Beispiel mit Test::WWW::Mechanize ). Dann, wenn Sie die Dinge ändern Sie immer wissen, wenn etwas kaputt geht, und was ist es, dass bricht.

extrahiert Dann HTML-Code in Vorlagen und häufig U-Boote in Modulen verwendet. Danach ist es ein Stück Kuchen auf einen Rahmen zu wechseln.

In der Regel Schritt für Schritt gehen, so dass Sie immer eine funktionierende Anwendung haben.

Andere Tipps

extricate den HTML von der Verarbeitungslogik in dem CGI-Skript. Identifizieren Sie den gesamten Code, der die HTML-Ausgabe beeinflusst, da diese Kandidaten sind Template-Variablen für immer. Trennen Sie, dass in eine HTML-Datei, wobei die identifizierten Teile mit Template-Variablen gekennzeichnet. Schließlich werden Sie die Seite so umgestalten können, dass die gesamte Verarbeitung zu Beginn des Codes und die HTML-Vorlage nur am Ende der gesamten Verarbeitung aufgerufen gemacht wird.

In dieser Art von Situation, von Grund auf neu Umschreiben im Grunde ist der alte Code nützlich für A) Prüfung und B) Design-Details. Im Idealfall würde man eine Reihe von Tests machen, für alle grundlegenden Funktionen, die Sie replizieren möchten, oder zumindest Tests, die die letzten Seiten analysieren, so können Sie den neuen Code zu sehen ist, die gleichen Informationen für die gleichen Eingaben zurück.

Konstruktionsdetails innerhalb des Codes könnten nutzlos sein, je nachdem, wie viel der Rahmen automatisch abwickelt. Wenn Sie eine gute Reihe von Tests haben, und eine einfache Konvertierung gut funktioniert, sind Sie fertig. Wenn das Verhalten des neuen nicht den alten entsprechen, müssen Sie wahrscheinlich noch tiefer in die graben „Warum?“ und das wird wahrscheinlich etwas seltsam aussehende sein, das macht keinen Sinn, auf den ersten Blick machen.

Eine Sache zu erinnern zuerst zu tun ist, herauszufinden, ob jemand etwas ähnliches im Rahmen gemacht hat Sie verwenden. Sie könnten sich eine Menge Zeit und Geld sparen.

Hier ist, wie ich es Python hätte anstelle von Perl, aber das sollte keine Rolle spielen:

  1. Getrennt aus HTML und Code in verschiedene Dateien. Ich habe eine Template-Engine für das.
  2. Erstellt Funktionen von dem Code , die ein template mit einem Satz von Parametern gemacht werden.
  3. organisierte die Funktionen (was ich genannt Ansichten , inspiriert von Django) in einer sinnvollen Art und Weise. (Admin Ansichten, Benutzeransichten, etc.) Die Ansichten alle folgen die gleiche Aufrufkonvention
  4. die Datenbank und die Anfrage Sachen Überarbeitete heraus, so dass die Ansichten würde nur optisch spezifischen Code enthalten (sprich: Umgang mit GET, POST-Anfragen usw. aber nichts mit niedrigem Pegel !). Stützten sich auf die bestehenden Bibliotheken für das.

Ich bin hier im Moment. :-) Der nächste offensichtliche Schritt ist natürlich:

  • schreiben Dispatcher , welche Karten URLs Ihre Ansichten . Dies gilt auch für schöneren URLs führen und schöner 404- und Fehlerbehandlung natürlich.

Eine der Annahmen, die Rahmenbedingungen zu machen ist, dass die URLs an den Code abzubilden. Zum Beispiel in einem Rahmen sehen Sie oft folgende:

http://app.com/docs/list
http://app.com/docs/view/123

Normalerweise obwohl der alte CGI-Skripte wie das nicht funktioniert, sind Sie eher etwas haben, wie:

http://app.com/docs.cgi?action=view&id=123

Um die Vorteile des Frameworks nehmen Sie gut brauchen können alle URLs zu ändern. Egal, ob Sie dies tun können, und wie Sie alte Links weiter arbeiten, kann auch einen großen Teil Ihrer Entscheidung bilden.

Frameworks auch Unterstützung für einige von ORM Art bieten (Objekt-Relational-Mapper), die abstrahiert die Datenbank Anrufe und können Sie nur mit Objekten tun. Für Catalyst dies ist in der Regel DBIx::Class . Sie sollten bewerten, was die Kosten für diese Schalt sein wird.

Sie werden wahrscheinlich feststellen, dass Sie ein komplett neu geschrieben, mit dem alten Code als Referenz-Plattform tun wollen. Dies kann viel weniger Arbeit, als Sie erwarten. Doch mit ein paar Spielzeug-Websites beginnen, ein Gefühl für, welche framework / ORM / Vorlage erhalten Sie entscheiden, zu gehen.

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