Ich habe seit dem CTP mit ASP.NET MVC herumgespielt und ich mag viele Dinge, die sie getan haben, aber es gibt Dinge, die ich einfach nicht verstehe.
Zum Beispiel habe ich Beta1 heruntergeladen und damit eine kleine persönliche Seite / Lebenslauf / Blog zusammengestellt. Hier ist ein Ausschnitt aus der ViewSinglePost-Ansicht:
<%
// Display the "Next and Previous" links
if (ViewData.Model.PreviousPost != null || ViewData.Model.NextPost != null)
{
%> <div> <%
if (ViewData.Model.PreviousPost != null)
{
%> <span style="float: left;"> <%
Response.Write(Html.ActionLink("<< " + ViewData.Model.PreviousPost.Subject, "view", new { id = ViewData.Model.PreviousPost.Id }));
%> </span> <%
}
if (ViewData.Model.NextPost != null)
{
%> <span style="float: right;"> <%
Response.Write(Html.ActionLink(ViewData.Model.NextPost.Subject + " >>", "view", new { id = ViewData.Model.NextPost.Id }));
%> </span> <%
}
%>
<div style="clear: both;" />
</div> <%
}
%>
Widerlich! (Beachten Sie auch, dass es sich bei dem HTML-Code um temporären Platzhalter-HTML handelt. Sobald die Funktionalität funktioniert, erstelle ich ein tatsächliches Design .)
Mache ich etwas falsch? Weil ich viele dunkle Tage im klassischen ASP verbracht habe und diese Tag-Suppe mich stark daran erinnert.
Jeder predigt, wie man saubereres HTML machen kann. Erraten Sie, was? 1% aller Menschen betrachten das ausgegebene HTML. Für mich ist es egal, ob Webforms meine Einrückung im gerenderten HTML-Code durcheinander bringt, solange ich Code habe, der einfach zu pflegen ist ... Dies ist nicht der Fall!
Also, konvertiere mich, ein eingefleischter Webform-Typ, warum sollte ich meine schön geformten ASPX-Seiten dafür aufgeben?
Bearbeiten: Die Zeile "temp Html / css" ist fett gedruckt, damit die Leute darüber nachdenken.
quelle
Antworten:
Im Vergleich zu Web Forms ist MVC gleichzeitig ein Ansatz auf niedrigerer Ebene für die HTML-Generierung mit besserer Kontrolle über die Seitenausgabe und ein übergeordneter, architektonisch orientierter Ansatz. Lassen Sie mich Web Forms und MVC erfassen und zeigen, warum ich denke, dass der Vergleich Web Forms in vielen Situationen bevorzugt - solange Sie nicht in einige klassische Web Forms-Fallen geraten.
Web Forms
Im Web Forms-Modell entsprechen Ihre Seiten direkt der Seitenanforderung des Browsers. Wenn Sie einen Benutzer zu einer Liste von Büchern weiterleiten, haben Sie wahrscheinlich eine Seite mit dem Namen "Booklist.aspx", auf die Sie ihn weiterleiten. Auf dieser Seite müssen Sie alles angeben, was zum Anzeigen dieser Liste erforderlich ist. Dies umfasst Code zum Abrufen von Daten, Anwenden einer beliebigen Geschäftslogik und Anzeigen der Ergebnisse. Wenn sich eine Architektur- oder Routing-Logik auf die Seite auswirkt, müssen Sie auch die Architekturlogik auf der Seite codieren. Eine gute Web Forms-Entwicklung umfasst normalerweise die Entwicklung einer Reihe unterstützender Klassen in einer separaten (Unit-testbaren) DLL. Diese Klasse (n) behandeln Geschäftslogik, Datenzugriff und Architektur- / Routingentscheidungen.
MVC
MVC betrachtet die Entwicklung von Webanwendungen eher als "architektonisch": Es bietet ein standardisiertes Gerüst, auf dem aufgebaut werden kann. Es bietet auch Tools zum automatischen Generieren von Modell-, Ansichts- und Controller-Klassen innerhalb der etablierten Architektur. Beispielsweise beginnen Sie sowohl in Ruby on Rails (ab jetzt nur noch "Rails") als auch in ASP.NET MVC immer mit einer Verzeichnisstruktur, die das Gesamtmodell der Webanwendungsarchitektur widerspiegelt. Um eine Ansicht, ein Modell und einen Controller hinzuzufügen, verwenden Sie einen Befehl wie Rails "Rails-Skript / Gerüst generieren {Modellname}" (ASP.NET MVC bietet ähnliche Befehle in der IDE). In der resultierenden Controller-Klasse gibt es Methoden ("Aktionen") für Index (Liste anzeigen), Anzeigen, Neu und Bearbeiten und Zerstören (zumindest in Rails ist MVC ähnlich). Standardmäßig sind diese "
Das Layout von Verzeichnissen und Dateien ist in MVC von Bedeutung. In ASP.NET MVC hat die Indexmethode für ein "Buch" -Objekt wahrscheinlich nur eine Zeile: "Return View ();" Durch die Magie von MVC wird das Buchmodell an die Seite "/View/Books/Index.aspx" gesendet, auf der Sie Code zum Anzeigen von Büchern finden. Rails Ansatz ist ähnlich, obwohl die Logik etwas expliziter und weniger "magisch" ist. Eine Ansichtsseite in einer MVC-App ist normalerweise einfacher als eine Web Forms-Seite, da sie sich nicht so sehr um Routing, Geschäftslogik oder Datenverarbeitung kümmern müssen.
Vergleich
Die Vorteile von MVC liegen in einer sauberen Trennung von Bedenken und einem saubereren, HTML / CSS / AJAX / Javascript-zentrierten Modell für die Erstellung Ihrer Ausgabe. Dies verbessert die Testbarkeit, bietet ein standardisierteres Design und öffnet die Tür zu einer Website vom Typ "Web 2.0".
Es gibt jedoch auch einige signifikante Nachteile.
Erstens, während es einfach ist, eine Demo-Site in Betrieb zu nehmen, weist das gesamte Architekturmodell eine signifikante Lernkurve auf. Wenn sie "Konvention über Konfiguration" sagen, klingt das gut - bis Sie feststellen, dass Sie eine Konvention im Wert von einem Buch lernen müssen. Darüber hinaus ist es oft ein wenig aufreizend , um herauszufinden , was los ist, weil Sie sind auf Magie anstatt explizite Anrufe zu verlassen. Zum Beispiel, dass "Return View ();" oben anrufen? Der exakt gleiche Aufruf kann in anderen Aktionen gefunden werden, aber sie gehen an verschiedene Orte. Wenn Sie die MVC-Konvention verstehendann wissen Sie, warum dies getan wird. Es ist jedoch sicherlich kein Beispiel für eine gute Benennung oder leicht verständlichen Code, und es ist für neue Entwickler viel schwieriger zu erlernen als Web Forms (dies ist nicht nur eine Meinung: Ich hatte letztes Jahr einen Sommerpraktikanten, der Web Forms lernte und MVC in diesem Jahr und die Unterschiede in der Produktivität waren ausgeprägt - zugunsten von Web Forms). Übrigens ist Rails in dieser Hinsicht etwas besser, obwohl Ruby on Rails dynamisch benannte Methoden bietet, an die man sich auch ernsthaft gewöhnen muss.
Zweitens geht MVC implizit davon aus, dass Sie eine klassische Website im CRUD-Stil erstellen. Die Architekturentscheidungen und insbesondere die Codegeneratoren sind alle darauf ausgelegt, diese Art von Webanwendung zu unterstützen. Wenn Sie eine CRUD-Anwendung erstellen und eine bewährte Architektur übernehmen möchten (oder Architekturdesign einfach nicht mögen), sollten Sie wahrscheinlich MVC in Betracht ziehen. Wenn Sie jedoch mehr als CRUD ausführen und / oder mit der Architektur einigermaßen kompetent sind, fühlt sich MVC möglicherweise wie eine Zwangsjacke an, bis Sie das zugrunde liegende Routing-Modell wirklich beherrschen (das erheblich komplexer ist als das einfache Routing in einer WebForms-App). Selbst dann hatte ich das Gefühl, immer gegen das Modell zu kämpfen und mir Sorgen um unerwartete Ergebnisse zu machen.
Drittens, wenn Sie sich nicht für Linq interessieren (entweder weil Sie befürchten, dass Linq-to-SQL verschwinden wird, oder weil Sie Linq-to-Entities lächerlich überproduziert und unterversorgt finden), dann wollen Sie es auch nicht Diesen Weg zu gehen, da ASP.NET MVC-Gerüstwerkzeuge um Linq herum gebaut wurden (dies war der Killer für mich). Das Datenmodell von Rails ist auch ziemlich umständlich im Vergleich zu dem, was Sie erreichen können, wenn Sie Erfahrung mit SQL haben (und insbesondere, wenn Sie mit TSQL und gespeicherten Prozeduren vertraut sind!).
Viertens weisen MVC-Befürworter häufig darauf hin, dass MVC-Ansichten dem HTML / CSS / AJAX-Modell des Webs näher kommen. Zum Beispiel sind "HTML-Helfer" - die kleinen Code-Aufrufe auf Ihrer vew-Seite, die Inhalte austauschen und in HTML-Steuerelemente einfügen - viel einfacher in Javascript zu integrieren als Web Forms-Steuerelemente. ASP.NET 4.0 bietet jedoch die Möglichkeit, Ihre Steuerelemente zu benennen, und beseitigt diesen Vorteil weitgehend.
Fünftens verspotten MVC-Puristen häufig Viewstate. In einigen Fällen haben sie Recht. Viewstate kann jedoch auch ein großartiges Werkzeug und ein Segen für die Produktivität sein. Zum Vergleich: Die Handhabung von Viewstate ist viel einfacher als der Versuch , Websteuerelemente von Drittanbietern in eine MVC-App zu integrieren. Während der Steuerung Integration für MVC bekommen kann einfacher, alle aktuellen Bemühungen , dass ich leidet unter der Notwendigkeit zu bauen gesehen habe (etwas grody) Code , der diese Kontrollen wieder auf die Ansicht der Controller - Klasse zu verknüpfen (das ist - zu Arbeit um das MVC - Modell ).
Schlussfolgerungen
Ich mag die MVC-Entwicklung in vielerlei Hinsicht (obwohl ich Rails bei weitem gegenüber ASP.NET MVC bevorzuge). Ich denke auch, dass es wichtig ist, dass wir nicht in die Falle tappen, dass ASP.NET MVC ein "Anti-Pattern" von ASP.NET Web Forms ist. Sie sind unterschiedlich, aber nicht völlig fremd und sicherlich gibt es Platz für beide.
Ich bevorzuge jedoch die Entwicklung von Web Forms, da es für die meisten Aufgaben einfach einfacher ist, Dinge zu erledigen (mit Ausnahme der Erstellung einer Reihe von CRUD-Formularen). MVC scheint in gewissem Maße auch unter einem Übermaß an Theorie zu leiden . Schauen Sie sich in der Tat die vielen Fragen an, die hier auf SO von Personen gestellt werden, die seitenorientiertes ASP.NET kennen, aber MVC ausprobieren. Ausnahmslos knirschen die Zähne, da Entwickler feststellen, dass sie keine grundlegenden Aufgaben erledigen können, ohne durch Reifen zu springen oder eine große Lernkurve zu überstehen. Dies ist es, was Web Forms in meinem Buch MVC überlegen macht: Mit MVC zahlen Sie einen realen Preis , um ein bisschen mehr Testbarkeit zu erlangen oder, noch schlimmer, einfach als cool angesehen zu werden, weil Sie das verwendenneueste Technik.
Update: Ich wurde im Kommentarbereich heftig kritisiert - einige davon sind ziemlich fair. Daher habe ich mehrere Monate damit verbracht, Rails und ASP.NET MVC zu lernen, um sicherzugehen, dass ich das nächste große Ding nicht wirklich verpasst habe! Natürlich trägt es auch dazu bei, dass ich eine ausgewogene und angemessene Antwort auf die Frage gebe. Sie sollten wissen, dass die obige Antwort eine wichtige Neufassung meiner ursprünglichen Antwort ist, falls die Kommentare nicht synchron zu sein scheinen.
Während ich mir MVC genauer ansah, dachte ich für eine Weile, dass ich am Ende einen großen Mea Culpa haben würde. Am Ende kam ich zu dem Schluss, dass MVC den Anruf für mich nicht wirklich beantwortet, obwohl ich denke, dass wir viel mehr Energie für die Architektur und Testbarkeit von Web Forms aufwenden müssen. Also ein herzliches Dankeschön an die Leute, die meine erste Antwort intelligent kritisiert haben.
Was diejenigen betrifft , die dies als religiösen Kampf betrachteten und unermüdlich Abstimmungsfluten verursachten, verstehe ich nicht, warum Sie sich die Mühe machen (mehr als 20 Abstimmungen innerhalb von Sekunden bei mehreren Gelegenheiten sind sicherlich nicht normal). Wenn Sie diese Antwort lesen und sich fragen, ob meine Antwort wirklich "falsch" ist, da die Punktzahl weitaus niedriger ist als einige der anderen Antworten, können Sie sicher sein, dass sie mehr über einige Leute aussagt, die anderer Meinung sind als der allgemeine Sinn von die Community (insgesamt wurde diese weit über 100 Mal positiv bewertet).
Tatsache ist, dass sich viele Entwickler nicht für MVC interessieren und dies in der Tat keine Minderheitensicht ist (selbst innerhalb von MS, wie die Blogs zu zeigen scheinen).
quelle
Mit MVC haben Sie mehr Kontrolle über Ihre Ausgabe, und mit dieser Kontrolle steigt das Risiko, schlecht gestaltetes HTML, Tag-Suppe usw. zu schreiben.
Gleichzeitig haben Sie einige neue Optionen, die Sie vorher nicht hatten ...
Das heißt nicht, dass Sie mit WebForms nichts davon tun können, aber MVC macht es einfacher.
Ich verwende WebForms immer noch, wenn ich schnell eine Webanwendung erstellen muss, da ich Serversteuerelemente usw. nutzen kann. WebForms verbirgt alle Details von Eingabe-Tags und Senden-Schaltflächen.
Sowohl WebForms als auch MVC können zu absolutem Müll führen, wenn Sie nachlässig sind. Wie immer führt eine sorgfältige Planung und ein durchdachtes Design zu einer hochwertigen Anwendung, unabhängig davon, ob es sich um MVC oder WebForms handelt.
[Aktualisieren]
Wenn es auch ein Trost ist, ist MVC nur eine neue, sich weiterentwickelnde Technologie von Microsoft. Es gab viele Postings, bei denen WebForms nicht nur bleiben, sondern weiterentwickelt werden für ...
http://haacked.com
http://www.misfitgeek.com
http://rachelappel.com
... und so weiter...
Für diejenigen, die sich Sorgen über den Weg machen, den MVC nimmt, würde ich vorschlagen, "den Jungs" Ihr Feedback zu geben. Sie scheinen bisher zuzuhören!
quelle
Die meisten Einwände gegen ASP.NET MVC scheinen sich auf die Ansichten zu konzentrieren, die eines der "optionalsten" und modularsten Bits in der Architektur sind. NVelocity , NHaml , Funken , XSLT und andere Ansicht Motoren können leicht ausgelagert (und es wurde mit jeder neuen Version immer einfacher). Viele von ihnen haben VIEL präzisere Syntax für Präsentationslogik und Formatierung, während sie dennoch die vollständige Kontrolle über das ausgegebene HTML geben.
Darüber hinaus scheint fast jede Kritik auf das <%%> -Tagging in den Standardansichten zurückzuführen zu sein und darauf, wie "hässlich" es ist. Diese Meinung wurzelt häufig in der Verwendung des WebForms-Ansatzes, der nur den größten Teil der klassischen ASP-Hässlichkeit in die CodeBehind-Datei verschiebt.
Auch ohne Code-Behinds "falsch" zu machen, gibt es Dinge wie OnItemDataBound in Repeatern, die genauso ästhetisch hässlich sind, wenn auch nur auf andere Weise, als "Tag-Suppe". Eine foreach-Schleife kann viel einfacher zu lesen sein, selbst wenn Variablen in die Ausgabe dieser Schleife eingebettet sind, insbesondere wenn Sie von anderen Nicht-ASP.NET-Technologien zu MVC kommen. Google-fu benötigt viel weniger, um die foreach-Schleife zu verstehen, als herauszufinden, dass die Möglichkeit, dieses eine Feld in Ihrem Repeater zu ändern, darin besteht, sich mit OnItemDataBound (und dem Nest der Ratte, zu prüfen, ob es das richtige Element ist, das geändert werden soll) zu messen.
Das größte Problem bei ASP-Tag-Suppe-gesteuerten "Spaghetti" bestand eher darin, Dinge wie Datenbankverbindungen direkt zwischen den HTML-Code zu schieben.
Dass dies zufällig mit <%%> geschehen ist, ist nur eine Korrelation mit der Spaghetti-Natur des klassischen ASP, nicht mit der Ursache. Wenn Sie Ihre Ansichtslogik auf HTML / CSS / Javascript und die für die Präsentation erforderliche minimale Logik beibehalten , ist der Rest die Syntax.
Stellen Sie beim Vergleich eines bestimmten Funktionsumfangs mit WebForms sicher, dass alle vom Designer generierten C # und das Code-Behind-C # zusammen mit dem ASPX-Code enthalten sind, um sicherzustellen, dass die MVC-Lösung tatsächlich nicht viel einfacher ist .
In Kombination mit der vernünftigen Verwendung von Teilansichten für wiederholbare Teile der Präsentationslogik kann dies wirklich schön und elegant sein.
Persönlich wünsche ich mir, dass sich ein Großteil der frühen Inhalte des Tutorials mehr auf dieses Ende der Dinge konzentriert als fast ausschließlich auf das Testen, die Umkehrung der Kontrolle usw. Während die Experten gegen diese anderen Dinge Einwände erheben, sind die Leute in den Gräben wahrscheinlicher Einwände gegen die "Tag Suppe".
Unabhängig davon ist dies eine Plattform, die sich noch in der Beta befindet. Trotzdem werden immer mehr Bereitstellungs- und Nicht-Microsoft-Entwickler damit arbeiten als mit den meisten Microsoft-Beta-Technologien. Aus diesem Grund scheint es so, als ob es weiter fortgeschritten ist als die Infrastruktur (Dokumentation, Leitmuster usw.). Wenn es an dieser Stelle wirklich verwendbar ist, wird dieser Effekt nur noch verstärkt.
quelle
Sie können einen weiteren Beitrag verfassen, in dem Sie gefragt werden, wie dies ohne das eingebettete CSS geschehen soll.
HINWEIS: ViewData.Model wird in der nächsten Version zum Modell.
Und mit Hilfe einer Benutzersteuerung würde dies werden
Dabei wird PagerData über einen anonymen Konstruktor im Aktionshandler initialisiert.
edit: Ich bin gespannt, wie Ihre WebForm-Implementierung für dieses Problem aussehen würde.
quelle
Ich bin mir nicht sicher, an welchem Punkt die Leute aufgehört haben, sich um ihren Code zu kümmern.
HTML ist die öffentlichste Darstellung Ihrer Arbeit. Es gibt viele Entwickler, die Notepad, Notepad ++ und andere Nur-Text-Editoren verwenden, um viele Websites zu erstellen.
Bei MVC geht es darum, die Kontrolle über Webformulare zurückzugewinnen, in einer zustandslosen Umgebung zu arbeiten und das Model View Controller-Entwurfsmuster zu implementieren, ohne die zusätzliche Arbeit, die normalerweise bei der Implementierung dieses Musters anfällt.
Wenn Sie Kontrolle haben, Code bereinigen und MVC-Entwurfsmuster verwenden möchten, ist dies das Richtige für Sie. Wenn Sie nicht gerne mit Markups arbeiten, sich nicht darum kümmern, wie fehlerhaft Ihr Markup wird, verwenden Sie ASP.Net Web Forms.
Wenn Sie auch nicht mögen, werden Sie definitiv genauso viel Arbeit im Markup erledigen.
BEARBEITEN I Sollte auch angegeben werden, dass Web Forms und MVC ihren Platz haben, habe ich in keiner Weise festgestellt, dass eines besser ist als das andere, nur dass jede MVC die Stärke hat, die Kontrolle über das Markup wiederzugewinnen.
quelle
Ich denke, Sie vermissen einige Dinge. Erstens ist die Antwort nicht erforderlich. Schreiben Sie, Sie können die
<%= %>
Tags verwenden. Zweitens können Sie Ihre eigenen HtmlHelper-Erweiterungen schreiben, um allgemeine Aktionen auszuführen. Drittens hilft ein bisschen Formatierung sehr. Viertens würde all dies wahrscheinlich in einem Benutzersteuerelement stecken bleiben, das von mehreren verschiedenen Ansichten gemeinsam genutzt wird, und somit ist die Gesamtbewertung in der Hauptansicht sauberer.Ich gebe Ihnen zu, dass das Markup immer noch nicht so ordentlich ist, wie man es gerne hätte, aber es könnte durch die Verwendung einiger temporärer Variablen erheblich bereinigt werden.
Nun, das ist nicht so schlimm und es wäre noch besser, wenn ich es nicht für SO formatieren müsste.
quelle
Die große Sache mit MVC ist, dass es sich um ein seit langem bestehendes konzeptionelles Framework handelt, das sich als produktive und leistungsstarke Methode zum Erstellen von Webanwendungen und Workstation-Anwendungen erwiesen hat, die horizontal und vertikal skaliert werden können. Es geht direkt zurück zum Alto und Smalltalk. Microsoft kommt zu spät zur Party. Was wir jetzt mit ASP.NET MVC haben, ist wirklich primitiv, weil es so viel Nachholbedarf gibt; aber verdammt, sie gießen Neuerscheinungen schnell und wütend aus.
Was war die große Sache mit Ruby on Rails? Rails ist MVC. Entwickler haben konvertiert, weil es durch Mundpropaganda für Programmierer zum Weg geworden ist, produktiv zu sein.
Es ist eine große Sache; MVC und die implizite Unterstützung von jQuery sind Wendepunkte für Microsoft, die akzeptieren, dass plattformneutral von entscheidender Bedeutung ist. Und das Neutrale daran ist, dass Microsoft Sie im Gegensatz zu Web Forms nicht konzeptionell einbinden kann. Sie können Ihren gesamten C # -Code vollständig in einer anderen Sprache implementieren (z. B. PHP oder Java - Sie nennen es), da das MVC-Konzept portabel ist und nicht der Code selbst. (Und denken Sie daran, wie groß es ist, dass Sie Ihr Design als Workstation-App mit nur geringen Codeänderungen und ohne Designänderungen implementieren können. Versuchen Sie dies mit Web Forms.)
Microsoft hat entschieden, dass Web Forms nicht das nächste VB6 sein wird.
quelle
Bitte werfen Sie einen Blick auf Rob Conerys Beitrag Ich sagte, ich sage es einfach: Sie sollten MVC lernen
quelle
Die beiden Hauptvorteile des ASP.NET MVC-Frameworks gegenüber Webformularen sind:
Diese Gründe machen ASP.NET MVC nicht wirklich besser oder schlechter als Webformulare in Schwarzweiß. ASP.NET MVC hat seine Stärken und Schwächen, genau wie Webformulare. Die meisten Beschwerden über ASP.NET MVC scheinen jedoch auf mangelndes Verständnis der Verwendung zurückzuführen zu sein, anstatt auf tatsächlichen Fehlern im Framework. Der Grund, warum sich Ihr Code nicht richtig anfühlt oder nicht richtig aussieht, könnte sein, dass Sie über mehrjährige Erfahrung mit Webformularen und nur 1-2 Monate Erfahrung mit ASP.NET MVC verfügen.
Das Problem hier ist nicht so sehr, dass ASP.NET MVC rockt oder nervt, sondern dass es neu ist und es kaum Übereinstimmung darüber gibt, wie man es richtig verwendet. ASP.NET MVC bietet eine genauere Kontrolle darüber, was in Ihrer App geschieht. Dies kann bestimmte Aufgaben einfacher oder schwieriger machen, je nachdem, wie Sie sie angehen.
quelle
Hey, ich habe auch Probleme damit, zu MVC zu wechseln. Ich bin absolut kein Fan von klassischem ASP- und MVC-Rendering, das mich sehr an diese Tage erinnert. Je öfter ich MVC benutze, desto mehr wächst es auf mir. Ich bin ein Webform-Typ (wie viele) und habe mich in den letzten Jahren daran gewöhnt, mit Datagrids usw. zu arbeiten. Mit MVC wird das weggenommen. HTML Helper Klassen sind die Antwort.
Erst kürzlich habe ich zwei Tage lang versucht, herauszufinden, wie Paging einem "Grid" in MVC am besten hinzugefügt werden kann. Mit Webformularen konnte ich dies in kürzester Zeit herauspeitschen. Aber ich werde das sagen ... Nachdem ich die Paging-Hilfsklassen für MVC erstellt hatte, war die Implementierung extrem einfach. Für mich noch einfacher als Webformulare.
Abgesehen davon denke ich, dass MVC viel entwicklerfreundlicher sein wird, wenn es eine konsistente Reihe von HTML-Helfern gibt. Ich denke, wir werden in naher Zukunft eine Menge HTML-Hilfsklassen im Web sehen.
quelle
Es ist lustig, weil ich das gesagt habe, als ich zum ersten Mal Webformulare gesehen habe.
quelle
Ich gebe zu, dass ich asp.net MVC noch nicht bekomme. Ich versuche es in einem Nebenprojekt zu verwenden, aber es geht ziemlich langsam voran.
Abgesehen davon, dass ich nicht in der Lage bin, Dinge zu tun, die in Webformularen so einfach zu tun waren, bemerke ich die Tag-Suppe. Aus dieser Perspektive scheint es wirklich einen Schritt zurück zu machen. Ich hoffe immer wieder, dass es besser wird, wenn ich lerne.
Bisher ist mir aufgefallen, dass der Hauptgrund für die Verwendung von MVC darin besteht, die volle Kontrolle über Ihr HTML zu erlangen. Ich habe auch gelesen, dass asp.net MVC in der Lage ist, mehr Seiten schneller als Webformulare bereitzustellen, und wahrscheinlich ist die individuelle Seitengröße damit kleiner als eine durchschnittliche Webformularseite.
Es ist mir wirklich egal, wie mein HTML aussieht, solange es in den gängigen Browsern funktioniert, aber es ist mir egal, wie schnell meine Seiten geladen werden und wie viel Bandbreite sie beanspruchen.
quelle
Obwohl ich voll und ganz zustimme, dass dies ein hässliches Markup ist, halte ich es nicht für fair, die hässliche Ansichtssyntax zum Abschreiben von ASP.NET MVC als Ganzes zu verwenden. Die Ansichtssyntax hat die geringste Aufmerksamkeit von Microsoft erhalten, und ich erwarte voll und ganz, dass bald etwas dagegen unternommen wird.
In anderen Antworten wurden die Vorteile von MVC als Ganzes erörtert, daher werde ich mich auf die Ansichtssyntax konzentrieren:
Die Ermutigung, Html.ActionLink und andere Methoden zu verwenden, die HTML generieren, ist ein Schritt in die falsche Richtung. Dies riecht nach Serversteuerung und löst für mich ein Problem, das es nicht gibt. Wenn wir Tags aus Code generieren wollen, warum dann überhaupt HTML verwenden? Wir können einfach DOM oder ein anderes Modell verwenden und unsere Inhalte im Controller aufbauen. Ok, das hört sich schlecht an, nicht wahr? Oh ja, Trennung von Bedenken, deshalb haben wir eine Ansicht.
Ich denke, die richtige Richtung ist, die Ansichtssyntax so ähnlich wie HTML zu gestalten. Denken Sie daran, dass eine gut gestaltete MVC nicht nur die Trennung von Code und Inhalt ermöglicht, sondern auch die Optimierung Ihrer Produktion ermöglicht, indem Experten, die sich mit Layout auskennen, die Ansichten bearbeiten (auch wenn sie ASP.NET nicht kennen) Später als Entwickler können Sie einspringen und das Ansichtsmodell tatsächlich dynamisch gestalten. Dies ist nur möglich, wenn die Ansichtssyntax HTML sehr ähnlich sieht, sodass die Layouter DreamWeaver oder das derzeit beliebte Layout-Tool verwenden können. Möglicherweise bauen Sie Dutzende von Standorten gleichzeitig und müssen auf diese Weise skalieren, um die Produktionseffizienz zu steigern. Lassen Sie mich ein Beispiel geben, wie ich die Ansicht "Sprache" sehen konnte:
Dies hat mehrere Vorteile:
Was genau macht diese Syntax?
mvc: inner = "" - was auch immer in den Anführungszeichen steht, wird ausgewertet und der innere HTML-Code des Tags wird durch die resultierende Zeichenfolge ersetzt. (Unser Beispieltext wird ersetzt)
mvc: äußere = "" - was auch immer in den Anführungszeichen steht, wird ausgewertet und der äußere HTML-Code des Tags wird durch die resultierende Zeichenfolge ersetzt. (Wieder wird der Beispieltext ersetzt.)
{} - Dies wird zum Einfügen einer Ausgabe in Attribute verwendet, ähnlich wie bei <% =%>
mvc: if = "" - insde the qoutes ist der zu evakuierende boolesche Ausdruck. Am Ende des if wird das HTML-Tag geschlossen.
mvc: sonst
mcv: elseif = "" - ...
mvc: foreach
quelle
Jetzt kann ich hier nur für mich selbst sprechen:
IMO, wenn Sie ein eingefleischter (irgendetwas) sind, dann ist die Konvertierung nichts für Sie. Wenn Sie WebForms lieben, liegt das daran, dass Sie das erreichen können, was Sie brauchen, und das ist auch das Ziel eines jeden.
Webforms abstrahiert HTML gut vom Entwickler . Wenn dies Ihr Ziel ist, bleiben Sie bei Web Forms. Sie haben all die wundervollen "Click and Drag" -Funktionen, die die Desktop-Entwicklung zu dem gemacht haben, was sie heute ist. Es gibt viele enthaltene Steuerelemente (plus eine Vielzahl von Steuerelementen von Drittanbietern), die unterschiedliche Funktionen hervorbringen können. Sie können ein "Raster", das direkt mit einer DataSource verknüpft ist, aus Ihrer Datenbank ziehen. Es wird mit integrierter Inline-Bearbeitung, Paging usw. geliefert.
Derzeit ist ASP.NET MVC in Bezug auf Steuerelemente von Drittanbietern sehr eingeschränkt. Wenn Sie also Rapid Application Development mögen, bei dem viele Funktionen für Sie verkabelt sind, sollten Sie nicht versuchen, sich konvertieren zu lassen.
Nach alledem leuchtet hier ASP.NET: - TDD. Code ist nicht testbar, sagte Nuff.
Trennung von Bedenken. Das ist das Rückgrat des MVC-Musters. Mir ist völlig bewusst, dass Sie dies in Web Forms erreichen können. Ich mag jedoch auferlegte Struktur. In Web Forms war es zu einfach, Design und Logik zu mischen. ASP.NET MVC erleichtert es verschiedenen Teammitgliedern, an verschiedenen Abschnitten der Anwendung zu arbeiten.
Ich komme von woanders her: Mein Hintergrund ist CakePHP und Ruby on Rails. Es ist also klar, wo meine Vorurteile liegen. Es geht einfach darum, womit Sie sich wohl fühlen.
Lernkurve: Um den letzten Punkt zu erweitern; Ich hasste die Idee des "Templating", um die Funktionalität verschiedener Elemente zu ändern. Mir hat die Tatsache nicht gefallen, dass ein Großteil des Designs im Code hinter der Datei ausgeführt wurde. Es war noch eine Sache zu lernen, als ich bereits mit HTML und CSS vertraut war. Wenn ich etwas in einem "Element" auf der Seite tun möchte, stecke ich ein "div" oder "span" ein, klopfe eine ID darauf und los geht's. In Web Forms müsste ich nachforschen, wie das geht.
Aktueller Stand des Web "Design": Javascript-Bibliotheken wie jQuery werden immer häufiger. Die Art und Weise, wie Web Forms Ihre IDs beschädigt, erschwert lediglich die Implementierung (außerhalb von Visual Studio).
Mehr Trennung (Design): Da ein Großteil des Designs in Ihre Steuerelemente eingebunden ist, ist es für einen externen Designer (ohne Web Forms) sehr schwierig, an einem Web Forms-Projekt zu arbeiten. Web Forms wurde entwickelt, um das Ende aller und alle zu sein.
Viele dieser Gründe sind wiederum auf meine Unkenntnis von Web Forms zurückzuführen. Ein Web Forms-Projekt (sofern richtig entworfen) kann "die meisten" Vorteile von ASP.NET MVC bieten. Aber das ist die Einschränkung: "Wenn richtig entworfen". Und das ist nur etwas, was ich in Web Forms nicht kann.
Wenn Sie in Web Forms hervorragende Arbeit leisten, sind Sie effizient und es funktioniert für Sie. Dort sollten Sie bleiben.
Machen Sie im Grunde genommen einen kurzen Überblick über beide (versuchen Sie, eine unvoreingenommene Quelle zu finden [viel Glück]) mit einer Liste von Vor- und Nachteilen, bewerten Sie, welche zu Ihren Zielen passt, und wählen Sie basierend darauf aus.
Unter dem Strich wählen Sie den Weg des geringsten Widerstands und des größten Nutzens, um Ihre Ziele zu erreichen. Web Forms ist ein sehr ausgereiftes Framework und wird in Zukunft nur noch besser. ASP.NET MVC ist einfach eine weitere Alternative (um Ruby on Rails- und CakePHP-Entwickler wie mich einzubeziehen: P)
quelle
Die JSPs von Java EE sahen so aus, als sie zum ersten Mal vorgeschlagen wurden - hässlicher Scriptlet-Code.
Dann boten sie Tag-Bibliotheken an, um sie mehr HTML-tag-ish zu machen. Das Problem war, dass jeder eine Tag-Bibliothek schreiben konnte. Einige der Ergebnisse waren katastrophal, da die Leute viel Logik (und sogar Stil) in Tag-Bibliotheken eingebettet haben, die HTML generiert haben.
Ich denke, die beste Lösung ist die JSP Standard Tag Library (JSTL). Es ist "Standard", HTML-Tag-ish und hilft zu verhindern, dass Leute Logik in Seiten einfügen.
Ein zusätzlicher Vorteil besteht darin, dass diese Abgrenzungslinie zwischen Webdesignern und Entwicklern erhalten bleibt. Die guten Websites, die ich sehe, wurden von Menschen mit einem ästhetischen Sinn und Design für Benutzerfreundlichkeit entworfen. Sie legen Seiten und CSS an und geben sie an Entwickler weiter, die die dynamischen Datenbits hinzufügen. Als Entwickler, dem diese Gaben fehlen, geben wir meiner Meinung nach etwas Wichtiges preis, wenn wir Entwickler bitten, Webseiten von Suppe bis Nuss zu schreiben. Flex und Silverlight leiden unter demselben Problem, da es unwahrscheinlich ist, dass Designer JavaScript und AJAX gut kennen.
Wenn .NET einen ähnlichen Pfad wie JSTL hätte, würde ich empfehlen, dass sie sich damit befassen.
quelle
Ich dachte nur, ich würde das Aussehen dieses Beispiels mit der glänzenden neuen Razor View Engine teilen, die seit ASP .NET MVC 3 Standard ist.
Irgendein Problem damit?
Außerdem sollten Sie Ihre CSS-Stile eigentlich nicht einbinden, oder? Und warum prüfen Sie an drei Stellen statt nur an zwei Stellen die Nichtigkeit? Ein Extra
div
tut selten weh. So würde ich es machen:quelle
Ich kann nicht direkt mit dem ASP.NET MVC-Projekt sprechen, aber im Allgemeinen dominieren MVC-Frameworks die Entwicklung von Webanwendungen, weil
Sie bieten eine formale Trennung zwischen Datenbankbetrieb, "Geschäftslogik" und Präsentation
Sie bieten genügend Flexibilität in der Ansicht, damit Entwickler ihr HTML / CSS / Javascript so optimieren können, dass es in mehreren Browsern und zukünftigen Versionen dieser Browser funktioniert
Es ist das letzte Stück, das wichtig ist. Mit Webforms und ähnlichen Technologien verlassen Sie sich darauf, dass Ihr Anbieter Ihr HTML / CSS / Javascript für Sie schreibt. Es ist mächtig, aber Sie können nicht garantieren, dass die aktuelle Version von Webforms mit der nächsten Generation von Webbrowsern funktioniert.
Das ist die Kraft der Aussicht. Sie erhalten die volle Kontrolle über den HTML-Code Ihrer Anwendung. Der Nachteil ist, dass Sie diszipliniert genug sein müssen, um die Logik in Ihren Ansichten auf ein Minimum zu beschränken und den Vorlagencode so einfach wie möglich zu halten.
Das ist also der Kompromiss. Wenn Webforms für Sie funktionieren und MVC nicht, verwenden Sie weiterhin Webforms
quelle
Der größte Teil meiner Frustration besteht darin, nicht zu wissen, wie man Dinge "richtig" macht. Seit es als Vorschau veröffentlicht wurde, hatten wir alle ein bisschen Zeit, uns die Dinge anzuschauen, aber sie haben sich ziemlich verändert. Anfangs war ich sehr frustriert, aber das Framework scheint so funktionsfähig zu sein, dass ich ziemlich schnell extrem komplexe Benutzeroberflächen (sprich: Javascript) erstellen kann. Ich verstehe, dass Sie dies mit Webforms tun können, wie ich es zuvor getan habe, aber es war ein großer Schmerz im Hintern, alles richtig zu rendern. Oft habe ich einen Repeater verwendet, um die genaue Ausgabe zu steuern, und am Ende habe ich auch viel Spaghetti-Chaos, das Sie oben haben.
In dem Bestreben, nicht das gleiche Durcheinander zu haben, habe ich eine Kombination aus Domain, Service-Layern und einem Dto verwendet, um in die Ansicht zu übertragen. Kombiniere das mit Funken, einer View Engine und es wird richtig schön. Das Einrichten dauert ein bisschen, aber sobald Sie es in Betrieb genommen haben, habe ich einen großen Schritt in der Komplexität meiner visuellen Anwendungen gesehen, aber es ist so einfach, Code zu machen.
Ich würde es wahrscheinlich nicht genau so machen, aber hier ist Ihr Beispiel:
Das ist ziemlich wartbar, testbar und schmeckt in meiner Codesuppe lecker.
Das Mitnehmen ist, dass sauberer Code wirklich möglich ist, aber es ist eine große Veränderung gegenüber der Art und Weise, wie wir Dinge getan haben. Ich glaube aber noch nicht, dass es allen gefällt. Ich weiß, ich finde es immer noch heraus ...
quelle
Steve Sandersons kürzlich veröffentlichtes Buch 'Pro ASP.NET MVC' [1] [2] von Apress schlägt eine andere Alternative vor - das Erstellen einer benutzerdefinierten HtmlHelper-Erweiterung. In seinem Beispiel (aus Kapitel 4 auf Seite 110) wird das Beispiel einer Seitenliste verwendet, es kann jedoch leicht an Ihre Situation angepasst werden.
Sie würden es in Ihrer Ansicht mit Code wie folgt aufrufen:
[1] http://blog.codeville.net/2009/04/29/now-published-pro-aspnet-mvc-framework-apress/
[2] http://books.google.com/books?id=Xb3a1xTSfZgC
quelle
Ich hatte gehofft, einen Beitrag von Phil Haack zu sehen, aber er war nicht hier, also habe ich ihn einfach aus http://blog.wekeroad.com/blog/i-spose-ill-just-say-it-you-should ausgeschnitten und eingefügt -learn-mvc / im Kommentarbereich
quelle
Ich auch; Ich würde meine Zeit eher mit Silverlight als mit ASP.NET MVC verbringen. Ich habe MVC 1.0 ausprobiert und mir vor einigen Tagen die neueste Version 2.0 Beta 1 angesehen.
Ich kann nicht glauben, dass ASP.NET MVC besser ist als Webform. Das Verkaufsargument von MVC sind:
Webform mithilfe von Code-Behind. Thema, Skin und Ressource sind jedoch bereits perfekt, um Design und Logik zu trennen.
Viewstate: Die Verwaltung der Client-ID erfolgt unter ASP.NET 4.0. Ich mache mir nur Sorgen um Komponententests, aber Komponententests sind nicht genug, um mich von Webform zu ASP.NET MVC zu wenden.
Vielleicht kann ich sagen: ASP.NET MVC ist nicht schlecht, aber Webform ist bereits genug.
quelle
Ich benutze MVC seit dem Erscheinen von Preview 3 und obwohl es immer noch wachsende Schmerzen hat, hilft es einiges im Bereich der Teamentwicklung. Wenn Sie versuchen, drei Personen an einer einzelnen Webformularseite zu arbeiten, werden Sie das Konzept verstehen, Ihren Kopf gegen die Wand zu schlagen. Ich kann mit einem Entwickler zusammenarbeiten, der die Designelemente auf der Ansichtsseite versteht, und mit unserem ansässigen Linq-Gott, damit das Modell funktioniert, während ich alles in der Steuerung zusammenstelle. Ich habe mich noch nie in einem Bereich entwickeln können, in dem die Trennung von Bedenken so einfach zu erreichen war.
Das größte Verkaufsargument von ASP.Net MVC - StackOverflow wird auf dem MVC-Stack ausgeführt.
Davon abgesehen ... Ihr Code ist so viel hübscher als das, was ich normalerweise mit der Ansichtsseite mache. Außerdem arbeitet einer der Leute, mit denen ich zusammenarbeite, daran, den HTML-Helfer in eine Tag-Bibliothek zu packen. Anstelle von <% = Html.RandomFunctionHere ()%> funktioniert es wie
<hh: zufällige Funktion />
Ich hoffe nur, dass das MVC-Team irgendwann dazu kommt, weil ich sicher bin, dass sie es besser machen würden.
quelle
Verwenden Sie ein Fassadenmuster, um die gesamte Logik für alle Daten zu verpacken, die Sie anzeigen müssen, und verwenden Sie sie dann als generisches Element in Ihrer Ansicht und dann ... keinen Spaghetti-Code mehr. http://en.wikipedia.org/wiki/Design_pattern_(computer_science)
Wenn Sie weitere Hilfe benötigen, wenden Sie sich an [email protected]
quelle
Die Implementierung von ASP.NET MVC ist schrecklich. Das Produkt ist einfach nur zum Kotzen. Ich habe mehrere Demos davon gesehen und schäme mich für MSFT ... Ich bin sicher, die Leute, die es geschrieben haben, sind schlauer als ich, aber es ist fast so, als ob sie nicht wissen, was der Model-View-Controller ist .
Die einzigen Leute, die ich kenne und die versuchen, MVC zu implementieren, sind Leute, die gerne neue Dinge von MSFT ausprobieren. In den Demos, die ich gesehen habe, hatte der Moderator einen entschuldigenden Ton ...
Ich bin ein großer Fan von MSFT, aber ich muss sagen, dass ich keinen Grund sehe, mich mit der Implementierung von MVC zu beschäftigen. Verwenden Sie entweder Web Forms oder jquery für die Webentwicklung. Wählen Sie diesen Gräuel nicht.
BEARBEITEN:
Mit dem Architekturentwurfsmuster Model-View-Controller soll Ihre Domäne von der Präsentation von den Geschäftsregeln getrennt werden. Ich habe das Muster in jedem von mir implementierten Web Forms-Projekt erfolgreich verwendet. Das ASP.NET MVC-Produkt eignet sich nicht gut für das tatsächliche Architekturentwurfsmuster.
quelle