2010-02-07 7 views
9

Wir haben eine WebForms basierte Web-Anwendung mit diesen Eigenschaften:C# ASP.NET, WebForms zu MVC: Macht es Sinn, in unserem Fall zu ändern?

Large Business Object Framework (Engverbundene DAL/Business Objects/Server Validierung, ähnlich wie CSLA) vorkompilierte und im Bin-Ordner abgelegt. Verwendet viele UserControls. Wenn man sich MVC-Übersichten anschaut, dann scheint es einen deutlichen Unterschied darin zu geben, wie der Code aufgeteilt wird, es gibt keinen Sitzungszustand (was seltsam erscheint, aber möglicherweise in Ordnung, wenn die Website hauptsächlich Inhalte bereitstellt) und es scheint konstruierend zu sein Seiten sieht klassischen asp (Verwendung von <%%> Tags) ähnlich

habe ich die falsche Interpretation von MVC haben? Ist MVC nur eine bestimmte Architektur, oder werden die Dinge laufen und WebForms werden schließlich fallen gelassen? Wie teilt man das M-V-C auf, wenn ein bestehendes Business Objekt Framework existiert? Warum gibt es keinen Sitzungsstatus? Funktionieren UserControls in MVC?

Ich realisiere, dass dies subjektiv sein könnte, also meist nach Ihren Kommentaren zu diesem Thema suchen, um meine eigene Meinung zu machen.

+3

ASP.NET MVC stoppt nicht die Verwendung des Sitzungsstatus. Es ist nur ein Muster zur Erstellung einer ASP.NET-Anwendung. –

+0

@Hasan: Danke, nicht sicher, warum ich dachte, das wäre der Fall ... –

Antwort

11

MVC ist 90% + die gleiche wie WebForms, aber natürlich, wenn alle Debatten, die neigen dazu, sie, dass tid-Bit-out zu verlassen.

Sie können so viele Schichten darunter, wie Sie yor Daten wollen die Bereitstellung, und ja können Sie die Usercontrol-Stil tun. Es ist mehr eine Änderung der Denkweise als ein Technologiewechsel. MVC hat seine Vorteile, es umfasst die Tatsache, dass HTTP stateleess ist. Webforms abstrahiert diese Tatsache bis zu einem gewissen Grad, was einige Dinge auch einfacher macht (zB Viewstate). Sitzungsstatus, Kompilierung ... alles ist da, es ist im selben Rahmen unter beiden.

Kurz gesagt: Verwenden Sie, was Sie wollen, erforschen es gut (Beispielprojekte sind überall). Wenn Sie in ein Projekt vertieft sind, berücksichtigen Sie die Zeit für den Wechsel, die Lernkurve sowie die tatsächliche Codezeit. Diese Entscheidung liegt an Ihnen und Ihrem Team, wenn es zu unterschiedlich ist, dann kann es nicht sehr vorteilhaft sein, weil es einige Anpassung gibt. Wenn Sie mit der neuen Technologie vertrauter sind, kann MVC viel sauberer sein ... beide haben noch ihre Verwendungen.

Ich würde kein anderes Projekt in WebForms starten, aber das ist ich, und was ich fühle mich mit ... Sie müssen wirklich herausfinden, welche sich für Sie natürlicher und gegebenenfalls Ihr Team fühlt.

Auch, tvanfosson machte einen ausgezeichneten Punkt: je mehr Validierung oder wirklich was auch immer benutzerdefinierte Logik, die im Web-Projekt war, desto mehr Zeit benötigt, um über zu bewegen. Wenn Sie bereits eine hervorragende Trennung der Schichten haben, sind Sie in einer viel besseren Position, wenn nicht, das ist eine andere wichtige Zeitüberlegung.

+1

+1. Das ist ungefähr die beste Antwort, die ich auf eine solche Frage gesehen habe. – David

+2

Wenn sie eine Menge des Modells (Validierung eingeschlossen) in benutzerdefinierte Benutzersteuerelemente eingebaut haben, dann ist es eine größere Veränderung als Sie angeben - eine vollständige Neuarchitektur, IMO. – tvanfosson

+1

@tvanfosson - Ausgezeichneter Punkt, fügte diese Notiz dort hinzu. Ich denke, es hängt völlig davon ab, was ihre derzeitige Architektur ist. Bei den meisten WebForms-Projekten, denen ich begegnet bin, muss ich Ihnen zustimmen ... das ist letztendlich ein wichtiger Teil des Codes. –

6

Es klingt wie Sie eine Menge Kopplung zwischen Ihrem Domain-Modell und Ihre Präsentation haben. Wenn dies der Fall ist, würde eine erhebliche Menge an Nachbildung erforderlich sein. MVC unterstützt den Sitzungsstatus, aber ViewState wird nicht verwendet - es scheint, als ob Sie dort etwas verwirrt sind. Es unterstützt keine normalen Benutzersteuerelemente oder irgendetwas, das von ViewState abhängig ist. Sie können "Steuerelemente" für MVC erstellen (als "partielle" Ansichten bezeichnet), so dass Funktionalität vorhanden ist, aber in einer anderen Form. In MVC sind Ihre Ansichten stark von Ihrem Geschäftsmodell abgekoppelt. In der Regel verfügen Sie über eine Reihe von view-spezifischen Modellen, die zwischen den beiden Ansichten vermitteln, und die Views sind stark an das View-Modell und nicht an das Geschäftsmodell gebunden.

Während ich MVC als bessere Architektur für webbasierte Anwendungen empfehlen würde, bin ich mir in Ihrem Fall nicht sicher, ob es sinnvoll ist, (zumindest jetzt) ​​zu wechseln. Ich würde empfehlen, entweder bei WebForms zu bleiben (die laut Scott Hanselman nicht weggehen) oder Teile langsam zu migrieren, angefangen bei neuen Funktionen (oder Apps) bis hin zu MVC.

+1

Guter Punkt in Bezug auf den ViewState/Session State, definitiv dort verwechselt. Offensichtlich kommen wir von WebForms, die wir für SessionState und ViewState verwenden. Wenn wir den Session-Zustand weiterhin verwenden, ist das in Ordnung ... Wenn wir jedoch keinen ViewState haben und wir mehrere Postbacks in einem Formular ausführen, müssen wir zu allen Tricks zurückkehren, die wir in Cliassic ASP verwendet haben (z. B. Speicherwerte) auf der URL und lesen Sie Werte auf der Grundlage ihrer Form [] -Wert Was passiert, wenn eine TextBox auf der Seite ist zum Beispiel kann noch lesen TextBox1.Text Wert? –

+2

Es gibt keine serverseitigen Kontrollen in MVC.Sie erhalten die Daten über Modell Bindung an Aktionsparameter, typischerweise oder direkt von der Anfrage (oder über den Wertanbieter).Sie werden feststellen, dass das ganze Paradigma anders ist - zum einen können Sie mehrere Formulare pro Seite erstellen und jedes für sich selbst zurückgeben. Es ist auch, IMO, viel einfacher, AJAX zu verwenden, so dass der Mangel an Status viel weniger wichtig ist, da Sie den Benutzer auf der Seite belassen und die Anforderung asynchron im Hintergrund bearbeiten - keine Notwendigkeit für einen Rundlauf des gesamten Formulars. – tvanfosson

2

MVC ist eine glänzende neue Flasche für den gleichen alten Wein, der das Netz & ist, wie es funktioniert.

Auf der anderen Seite können Sie schließlich aus dem asp.net Ansichtszustand & Seite Lebenszyklus, Postbacks, verrückt URLs usw. wegbewegen

Wenn Sie von Web-Formularen zu MVC verschieben müssen, sehen Sie die Abhängung an Dritte Parteisteuerelemente, die Sie möglicherweise in Ihrer Anwendungsoberfläche verwendet haben. Nicht alle Anbieter haben MVC-Äquivalente bisher. Sitzungen & ViewState sind die anderen wichtigsten Aspekte, die auf der Benutzeroberfläche zu sehen sind. Wenn Sie eine öffentlich zugängliche Webanwendung haben, denken Sie daran, dass die URL mit einem Lesezeichen versehen ist. All dies sind möglicherweise zusätzliche Faktoren, die beim Wechsel zu MVC berücksichtigt werden müssen.

Normalerweise würde ich empfehlen, zuerst Ihren Code in Model-Controller-Schicht & Faktor, sobald dies abgeschlossen ist, dann ändern Sie die Benutzeroberfläche in Ansicht & verwenden Sie die URL-Routing-Mechanismen von MVC. Alternativ können Sie das anständige URL-Rewriting-Modul verwenden. & REST-style-URL zuerst veröffentlichen & Ihre alte URL in die neue URL umwandeln & dann langsam Abschnitte Ihrer Anwendung in MVC konvertieren.

+0

Guter Punkt in Bezug auf die Steuerelemente von Drittanbietern. Wir verwenden ziemlich viele auf dem Back-End für verschiedene Dinge und haben tatsächlich eine umfassende UI-Kontrollbibliothek für unsere eigenen UserControl + jQuery-Komponenten abgelegt, um den Overhead zu reduzieren. –

Verwandte Themen