Warum sollten Sie MVC über Web Forms verwenden?


11

Kürzlich beschrieb ein Architekt unser Unternehmen als Anbieter einer Rolls-Royce-Lösung (MVC), als er lediglich einen Toyota (Web Forms) benötigte.

Ich bin gespannt, was Sie von Webformularen im Vergleich zu MVC als architektonischer Wahl halten.


11
Ich denke, dass der Architekt kein sehr gutes Verständnis von ASP.NET MVC hat.
Adam Crossland

3
@ Chris Webforms ist keine Teilmenge von MVC. Beide arbeiten völlig unabhängig voneinander. Auch Webformulare sind alt und werden wahrscheinlich nicht mehr lange gewartet. Auch für Front-End-Web- / UI-Entwickler ist es der Anti-Christ.
Erik Reppen

Antworten:


20

Die Rolls-Royce / Toyota-Analogie ist furchtbar fehlerhaft und irreführend. Eine (ASP.NET MVC) ist nicht einfach eine schickere oder teurere Version der anderen (ASP.NET WebForms). Dies sind sehr unterschiedliche Ansätze zum Erstellen von Webanwendungen mit ASP.NET.

Für mich besteht der größte architektonische Unterschied zwischen MVC und WebForms darin, wie sie mit der zustandslosen Umgebung des Webs arbeiten: WebForms arbeitet hart daran, eine Reihe von Abstraktionen zu erstellen, die die zustandslose Natur der Webprogrammierung verbergen, während MVC die zustandslose Umgebung umfasst und damit arbeitet es.

Jeder Ansatz hat seine Vor- und Nachteile, aber ich mag es wirklich, wie sich das Erstellen von Websites mit MVC viel natürlicher anfühlt als mit WebForms (mit Schicht für Schicht aus undichten Abstraktionen ).


1
Diese unzüchtigen Abstraktionen sind sehr problematisch. Das Lernen von Asp .Net MVC öffnet Ihre Augen für das http-Protokoll
Michal Franc

10

Alte Frage, aber sie verdient eine detailliertere Antwort, nur für den Fall, dass irgendjemand da draußen noch ein Dilemma hat.

Letztendlich handelt es sich bei Webforms um eine Thin-Client-Lösung, mit der Sie eine Reihe hübscher Schaltflächen drücken und das Front-End-Material (Client-Material) für Sie erstellen. Wenn Sie Leute haben, die wissen, wie man es in Webformularen herauskurbelt, und es absolut keine Bedenken hinsichtlich Wartbarkeit / Modifizierbarkeit gibt und die Website vollständig kurzfristig und verfügbar ist, ist an diesem Ansatz überhaupt nichts auszusetzen. Es ist möglich zu lernen, wie man eigene Sachen macht, aber in diesem Fall müsste man wissen, vor welchen Webforms Webforms versucht, .NET App-Entwickler zu schützen, und vor allen Webforms Sachen, die die meisten clientseitigen Webentwickler dazu bringen, Microsoft zu ermorden verantwortliche Ingenieure.

In 99,5% aller anderen Anwendungsszenarien haben wir aufgehört, das Web vor App-Entwicklern zu verbergen, da Sie beim Schreiben von Web-Apps viel besser lernen sollten, wie das Web funktioniert. Die Ironie von Thick-vs-Thin-Client-Lösungen besteht darin, dass der Thin-Client-Ansatz unweigerlich den Mist aus Ihrem Front-End aufbläht und alles andere als performant ist. Noch wichtiger ist, dass diese Lösungen die Dinge für Menschen, die tatsächlich wissen, was sie tun und nicht durch das geltende Framework eingeschränkt werden möchten, immer zur Hölle gemacht haben.

Es gibt nichts Sinnloses, als jemanden, der alles über CSS, JavaScript, HTML, XHR weiß, zu nehmen und ihn völlig unbrauchbar zu machen, indem er ihn bei jedem Schritt mit einem Framework blockiert, das ...

  • Löscht alle nicht benötigten Skript-Tags in den Head-Tags, um zu verhindern, dass Sie Skriptabhängigkeiten vermasseln. (Besser, ein 'Skript-Manager' erledigt das für Sie.) Zugegeben, heutzutage stellt niemand sie dort auf, wenn er weiß, was er tut, aber das ist nur durcheinander.

  • Besteht darauf, dass Sie den gesamten HTML-Code in ein riesiges Formular-Tag einschließen. HTML erlaubt keine Formulare innerhalb von Formularen, so dass Sie Formulare auf die Webformulare oder überhaupt nicht erstellen.

  • Erstellt wie ein 18-stufiger "Lebenszyklus" für das, was eigentlich darauf hinauslaufen sollte, auf UI-Ereignisse zu reagieren, indem mit dem Browser interagiert wird, um Nachrichten an den Server zu senden und dann zu reagieren, wenn der Server antwortet. Es musste nie passieren, diesen Prozess mit einem großen, riesigen Müllhaufen zu abstrahieren (und um fair zu sein, MS ist nicht der einzige Esel, der versucht hat, dies zu tun).

  • Tatsächlich wird alles getan, um die Verwendung von Nicht-Webforms-Lösungen für Probleme zu verhindern. Beispiel: Als ich ein jüngerer Entwickler auf Kundenseite war, habe ich einen ganzen Tag damit verbracht, einen Weg zu finden, wie eine Senden-Schaltfläche oben auf der Seite eine Senden-Schaltfläche unten auf einer Seite auslöst (ich nehme an, aufgrund dieser einen großen) Riesenform). Normalerweise würde dies 5 Minuten dauern, aber nach einigen Stunden Reverse Engineering der verantwortlichen JavaScript-Webformulare stellte ich fest, dass sie unter anderem eine Eigenschaft festlegten, von der ich zu diesem Zeitpunkt noch nicht einmal wusste, was das letzte Formularelement ist Der Fokus lag darauf, dass beim Klicken auf eine Senden-Schaltfläche nur die offizielle Microsoft Submit (tm) -Schaltfläche für die Aktivierung eines offiziellen Microsoft Submit (tm) -Handlers funktioniert.

Also nein, Rolls-Royce gegen Toyota ist völlig unvernünftig. Ich würde mehr sagen, ein absolut vernünftiger Hyundai, für den Sie viel zu viel bezahlen, im Vergleich zu einem von Microsoft entwickelten Pinto mit einem Onboard-System, das automatisch scharfe 90-Grad-Kurven macht, wenn es feststellt, dass Sie Gas oder Öl von jemand anderem als Microsoft gekauft haben und es erkannt wird bequeme Wand zum Einschlagen. Ein ideales Auto für den selbstmörderisch markentreuen Fahrer, der nichts über das Internet weiß und Microsoft eine lebenslange Loyalität schwören möchte.

Alles, was .NET MVC wirklich ist, ist einfach und vernünftig, und es erfindet seine eigene Ebene nicht neu, um auf das Web zu klatschen. Es funktioniert nur mit dem, was da ist, um ein Kesselschild für Sie auszuschalten. Es gibt bessere / billigere / kostenlose Frameworks, aber wenn Sie sich bereits in die .NET-Sache eingeschlossen haben, könnten Sie es viel schlimmer machen.

Aber im Ernst, halten Sie das! @ # $ Von Webformularen fern. Es ist jetzt fast tot. Vergiss es. Sagen Sie Ihren Kunden, dass Sie es für das Dreifache des Geldes tun, wenn sie Ihnen auch einen exklusiven und lukrativen stundenweisen Supportvertrag versprechen, wenn sie tatsächlich etwas Neues oder Anderes tun möchten oder wenn der Mist zu brechen beginnt, weil nicht einmal MS dies könnte Machen Sie sich die Mühe, dem Giganten einer ajax.js-Datei mit 10.000 Zeilen, die sie aus ihrem DLL-Arsch ziehen, weiterhin etwas hinzuzufügen, wo Sie sie nicht berühren können.


Hallo Erik, du hast deine Antwort geliebt, also hast du meine Gegenstimme bekommen. Ich habe gerade HTML 5 und CSS gelernt, also war Ihr Beitrag sehr informativ.
Tschad

+1 Sehr schöne Antwort! Ich habe MVC jahrelang vermieden, weil ich dachte, es wäre nur ein komplizierterer Ansatz für Webformulare. Klingt so, als würde es in Wirklichkeit das, was ich mit Webformularen versuche, einfacher machen (z. B. versuche ich immer, alle Microsoft BS wie den Script Manager zu vermeiden).
Drew Chapin

6

Eine ASP.NET MVC-Lösung muss nicht komplizierter sein als eine WebForms-Lösung. Persönlich finde ich, dass ASP.NET MVC tatsächlich viel einfacher als WebForms ist, und es scheint definitiv von Natur aus sauberer zu sein.

Nach meiner Erfahrung haben viele MVC-Frameworks (ASP.NET, Rails, CodeIgniter usw.) weitgehend die gleichen Kernfunktionen und Konventionen. WebForms ist aus Web-Sicht wirklich die seltsame Ente. Ich vermute, dass die meisten Webprogrammierer ASP.NET MVC viel schneller lernen als WebForms.


5

Der Hauptgrund, warum Sie ASP.NET MVC über ASP.NET WebForms verwenden würden, ist die Testbarkeit. Sicher, Sie können WebForms auf eine Art Unit-Test testen, aber dies erfordert spöttische Frameworks und viel Schmerz. Der zweite Grund ist, dass MVC es etwas einfacher macht , Bedenken zu trennen. Dies kann viel Code-Wiederverwendung ermöglichen und Ihren Code lose koppeln. Dies bedeutet nicht, dass es in ASP.NET mit Mustern wie MVP nicht möglich ist, dasselbe zu tun.

Der Nachteil von MVC ist, dass Sie einen Großteil der Funktionalität verlieren und diese in den letzten zehn Jahren (fast) in WebForms integriert wurde. MVC hat seit seiner Einführung einen langen Weg zurückgelegt, um ähnliche Funktionen bereitzustellen.

Hat jemand auf die eine oder andere Weise Beweise dafür, welche Technologie "schneller" ist?

Ich denke nicht, dass einer besser ist als der andere. Ich mag das MVC-Framework sehr und habe es mit großem Erfolg verwendet, aber ich stelle immer sicher, dass ich die Technologie auswähle, die zum Projekt passt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.