Wie man vorhandene asp.net Anwendung auf Asp.net MVC Musterformat migriert
Ich möchten, migrieren Sie die vorhandenen asp.net Anwendung asp.net MVC-pattern-format jetzt. Welche Schritte sollte ich Folgen? Alle Schritt-für-Schritt-Anleitung wäre sehr hilfreich.
InformationsquelleAutor der Frage | 2009-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist meine Schritt-für-Schritt-Anleitung, basiert auf den Schritten, die wir getroffen haben, in meiner Firma während unser Umzug von einer klassischen ASP.Net Webforms zu ASP.Net MVC. Es ist nicht perfekt, und noch im Gange, da wir dies in Etappen, weil der Größe der Seite, aber vielleicht jemand anderes finden, und Datei eine verbesserte Antwort auf unsere Ergebnisse.
Phasen:
1. Planung - Verlegung von MVC Web Forms in ASP.Net erfordert sorgfältige Planung. Die Fehler, die wir gemacht in unserer Bewegung ist, die nicht erkennen, dass es wirklich zwei Aspekte dieser Phase der Planung, Routenplanung und Modell - /controller - /action-Planung.
Wenn Sie dies nicht tun, werden schwerwiegende Probleme später auf, als Sie versuchen, erweitern die Funktionalität Ihrer Website oder hit komplexer Migrationen.
Tipps:
- Blick auf Ihre aktuelle XML-sitemap und design, die verbesserte XML-sitemap - /Verzeichnis-Struktur verwendet werden, in der ASP.Net MVC-Anwendung. Finden Sie heraus, eine 'Sprache' für Ihre website, z.B. das default-Verhalten ASP.Net MVC ist eine http://sitename/{controller}/{action}/{id} Verhalten, aber Sie können dies überschreiben, so wie Sie gewinnen mehr Erfahrung hacking routing-Regeln.
Erinnern standardmäßig jeder Controller weitergeleitet werden, um über ein virtuelles Unterverzeichnis der Anwendung, z.B. http://sitename/X würde Weg zu XController (und durch die Standard-Index-Methode), http://sitename/Y/Get würde Weg zu YController die Get () - Methode. Dies können Sie ändern, wie Sie wünschen (routing ist wirklich mächtig), aber das würde den Rahmen dieser Antwort.
Unter Verwendung der vorhandenen XML-sitemap angeben, welche Ordner in der MVC-Struktur jedes aktuelle .aspx-Seite fallen sollte (natürlich zuerst Fragen, sollte es überhaupt existieren).
Wenn Scripts, Bilder usw. werden nicht zusammen gelagert werden, oder in einigen 'reservierte Namen' Ordner in jedem Unterverzeichnis, sollten Sie also jetzt, wie du bist Neugestaltung.
Dies ist, wie es wäre erheblich vereinfachen Ihr design, indem Sie auf der Karte.IgnoreRoute() routing-Regel-Befehl in der Globalen.aspx.cs-Datei zu umgehen, die Verarbeitung dieser Ordner Routen.
In unserem Fall haben wir spiegelten die realen Unterverzeichnis layout der aktuellen Seite, wo jedes Unterverzeichnis wurde ein controller, z.B. /Konto hätte einen AccountController, /X hätte XController. Alle Seiten, fiel drin waren ersetzt durch Aktionen innerhalb der einzelnen Controller. z.B. http://sitename/profile/about.aspx jetzt wurde http://sitename/profile/about und zugeordnet, um die "über" ActionResult-Methode innerhalb der profileController.
Dies ermöglicht es uns, bleiben Sie handlungsfähig, indem Sie eine teilweise migration von einem oder zwei Verzeichnissen oder mehreren Dateien in einem Verzeichnis) über eine Serie von sprints, anstatt zu migrieren, die gesamte Seite in einem Durchgang über eine viel längere Dauer.
Erstellen Sie eine neue ASP.Net MVC-Anwendung in Visual Studio und erstellen Sie sofort die Regeln in der Globalen.asax-Datei, ignorieren Sie routing-Regeln für die Ordner, die vorhanden sind in der aktuellen Website.
Kopieren Sie die Ordner aus, die ASP.Net Web-Anwendung auf die ASP.Net MVC-Anwendung Ordner. Führen Sie die website und sicherzustellen, dass es ordnungsgemäß funktioniert (sollte es da keine routing-Regeln werden noch verwendet).
Wählen Sie ein Unterverzeichnis oder eine Teilmenge von Dateien in einem Unterverzeichnis zu migrieren.
Für jeden .aspx-Seite in diesem Unterverzeichnis:
ein. Erstellen Sie Ihre Ansicht zuerst. Ich Neige dazu, verwenden Sie den web-browser gerenderte version der Seite als meine Basis-HTML -, und dann legte Platzhalter in den Orten, die ich kenne, sind gefüllt mit dynamischen Daten.
b. Verwenden Sie die Platzhalter für die dynamischen Daten, erstellen Sie einen ersten Entwurf des Modells mit einfachen Datentypen. Dieses Modell wird beginnen, einfache, aber werden ständig umgestaltet, wie Sie migrieren mehrere Seiten von der original-Website, also keine Sorge, wenn es beginnt, auf der Suche ein wenig schwer. Wenn Sie finden, sich selbst mit zu vielen Eigenschaften in einem Modell für Ihren Geschmack, oder sehen Sie eine logische Gruppierung, die nicht nur das Modell, bestimmte Teilmenge von Elementen, so ist dies vielleicht ein Zeichen das Modell refaktorisiert werden, um eine Objekt-statt mit diesen einfachen Datentypen wie Eigenschaften, sondern setzt sich in die business logic layer.
c. Erstellen Sie die controller, wenn es nicht noch erstellt, und die entsprechenden ActionResult Methode, die für die Aktion Ihre Planung ermittelt hat, sollte die route zu dieser Ansicht.
Wenn Sie etwas realisieren, dass es eine neue Aktion, die nicht anzeigen für eine Seite aus der alten Website, dann erstellen Sie die Ansicht für den controller, und fügen Sie die entsprechenden //TODO: tags, so dass Sie können verfolgen, diese zu implementieren nachdem Sie die Migration der bestehenden Seiten.
d. Erwägen Sie, in einigen handling-code für unbekannte Handlungen als gut, wenn Sie nicht haben a {*catchall} Routing-Regel für diese bereits in Ihrer global.asax.cs-Datei.
e. Erstellen Sie den Konstruktor von Klassen für das Modell so, dass bestimmte Parameter, die der Controller (übergeben als {id} oder vielleicht eine Anfrage.QueryString-parameter aus der URL bzw. im HTTP-header oder Cookies), das Modell wird wissen, wie zu erreichen, um Ihre bestehende business-Logik, Klassen-und Aufbau selbst für die Darstellung der Anzeigen.
f. Gehen Sie zur nächsten Seite in der Liste aus und beginnen Sie erneut mit Schritt a an.
Schließlich erstellen Sie die routing-Regel aufrufen, werden Ihre neuen Controller und ermöglichen Sie die Aktionen, die Sie geschrieben haben, umgesetzt werden. Debug, debug, debug...Wenn du bist glücklich, alles ist gut, entfernen Sie die vorhandenen Ordner und Dateien, die Sie haben migriert von Ihrer Haupt-Website, sowie die IgnoreRoute Regel in der globalen.asax.cs.
Erstellen Sie eine Umleitung, in welcher Art und Weise Sie bevorzugen, wenn Sie möchten, bewahren alte Verzeichnis-und Datei-Namen für Kontinuität (z.B. der Benutzer kann Lesezeichen bestimmte Seiten der alten Website schon).
Hinweis: Wenn Sie halten Sie den genauen Namen der alten Unterverzeichnisse in Ihrem MVC-Website während der Portierung phase, es ist besser für die Migration eines ganzen Unterverzeichnisses auf eine Zeit, die ich realisiert habe, da nur ein paar Dateien die routing-Regeln, die Sie schreiben müssen, werden komplexer, da, wenn ein vorhandener Ordner mit demselben Namen vorhanden ist wie eine routing-Regel den Pfad und Ordner ein Standard.aspx-Datei dann (/foldername/), wird standardmäßig der Standardwert.aspx-Seite, wie es dauert, precidence über die routing-Regeln.
Tipp: Ernsthaft in Erwägung ziehen, mit einem tool wie RouteDebug für die route debugging, so dass Sie herausfinden können seltsame Dinge wie oben, oder, wenn Sie mehrere routing-Regeln auslösen und verursachen damit unerwartetes Verhalten.
Dies ist mein Erster Entwurf, bitte geben Sie mir feedback, wenn ich es verpasst habe alle Schritte, oder wenn Sie finden alle Löcher in der Führung, und die ich ändern werde die Antwort entsprechend.
InformationsquelleAutor der Antwort Nissan
Ich glaube nicht, dass es so etwas wie eine "Schritt-für-Schritt-migration" aus ASP.NET WebForms zu ASP.NET MVC. Sie sind zwei völlig unterschiedliche design-patterns baut auf dem gleichen Rahmen, aber es gibt (in den meisten Fällen) eine Menge Dinge, die müssen nicht nur verschoben, sondern komplett neu konzipiert, wenn man nicht nur bauen wollen, eine web-app auf dem MVC-Vorlage-Projekt statt der WebForms-Vorlage.
Der Hauptgrund dafür ist die Trennung von concerns, die viel strenger MVC als in WebForms. Ich bin derzeit (naja, ich sollte...) auf die Migration von einem alten und ziemlich buggy hobby-Projekt von WebForms, MVC und mein Ansatz hat im Grunde wurde "Blick auf die Funktionalität, re-bauen es von Grund auf." Natürlich hatte ich einige helper-Methoden für die Formatierung der Ausgabe etc, dass ich nur eingebaut in meinem neuen Projekt, aber die meisten grundlegenden Sachen, die ich wählte nur wiederholen ganz. Sie werden überrascht sein, wie wenig es braucht, mich zu erreichen die gleichen Ziele mit MVC jetzt, dass ich für die WebForms-app ein Jahr-und-ein-halb Jahren - mit der Nutzung von Entity Framework, jQuery und anderen süßen Sachen, Sie werden in der Lage sein, Ergebnisse zu liefern, die innerhalb von ein paar Stunden.
InformationsquelleAutor der Antwort Tomas Lycken
Kann diese paar zusätzliche Tipps helfen
@Klassen rendersection("Footer",false) @Abschnitt { } und so weiter,wenn Sie irgendwelche zusätzlichen ContentPlaceHolder außer dem Haupt-Körper-Ansicht, die RenderBody() .
alle den alten normalen runat="server" tags sind harmlos und tun nicht verhindern, kompiliert und kann anschließend gereinigt
alle Steuerelemente Sichtbarkeit, das war leicht zu kontrollieren in der code-behind-und markup-Symbole (Sichtbar="True") gesteuert und in code_behind durch die Verwendung von Steuerelement-Id muss umgestaltet werden, um ViewBag Sammlung und @wenn Blöcke in Rasierer anzeigen.
können Sie auch sehen, wie dieser ausgezeichnete Kurs von Pluralsight, um dieses
Thema (3h 49m)
InformationsquelleAutor der Antwort Iman Abidi
Meine Antwort wäre "Sie" nicht" :). Wenn Sie wirklich wollen, dies zu tun, können Sie das aktuelle asp.net Website, die als Ihr Ziel, oder als requirements "Dokument". Und vielleicht können Sie den datalayer in Ihrem Modell, aber du musst redesign der gesamten Website.
Wie Tomas schon darauf hingewiesen, es ist SEHR Verschieden von der klassischen asp.net.
InformationsquelleAutor der Antwort Morph