Aspnetcore: MVC ist zu komplex, um nutzbar zu sein?

Erstellt am 26. Jan. 2019  ·  26Kommentare  ·  Quelle: dotnet/aspnetcore

Bezieht sich Ihre Feature-Anfrage auf ein Problem? Bitte beschreiben.

Ich evaluiere MVC. Das Problem scheint zu sein, dass MVC eine komplizierte Raketenwissenschaft ist, aber mir muss etwas fehlen. Bitte erläutern Sie, warum jemand MVC über ASP.NET-Webformulare und die SqlCommand-Klasse von Entity FrameWork verwenden würde.

Beschreiben Sie die gewünschte Lösung

Ich möchte einfach mehrere Tabellen verbinden und das Ergebnis debuggen können. Aber selbst eine einfache Verbindung ist unglaublich komplex.

Beschreiben Sie Alternativen, die Sie in Betracht gezogen haben

Vergessen Sie die Raketenwissenschaft oder schlagen Sie alternative Verfahren vor, die Sie ohne jahrelanges Studium verstehen können. Oder bestätigen Sie mir bitte, dass die Verwendung von ASP.NET-Webformularen mit der SqlCommand-Klasse von Entity FrameWork tatsächlich ein einfacherer Ansatz ist.

Ich habe zwei Screenshots aus dem MVC-Beispiel der Contoso University angehängt. Bitte erklären Sie, wie jemand verstehen soll, was passiert? Ich kann nicht einmal die Ergebnismenge im Überwachungsfenster anzeigen. Und die Abfrage, die generiert wird - die ist auch angehängt - ...guter Gott, willst du mich verarschen? Denn was soll ein einfacher Join sein? Was ist, wenn ich das debuggen muss?

Was vermisse ich in dieser Bewertung außer einem Jahr klösterlichen Lebens vor Visual Studio, um diesen deklarativen Designansatz zum Erstellen einer Website herauszufinden?

Eine klare und prägnante Antwort wird sehr geschätzt.

Danke schön.

screen shot 2019-01-26 at 1 24 01 pm
screen shot 2019-01-26 at 1 24 45 pm

Zusätzlicher Kontext

Fügen Sie hier jeglichen anderen Kontext oder Screenshots zur Funktionsanfrage hinzu.

area-mvc

Hilfreichster Kommentar

Wenn Sie kein Fan von ORMs (Object Relation Mappers) wie EntityFramework sind, können Sie die SQL mit ADO.NET von Hand schreiben. Sie können auch ein leichtes ORM wie Dapper verwenden, das keine Abfragen generiert (Sie können sie von Hand schreiben). EntityFramework verfügt auch über eine ExecuteSQL-Methode, um Ihnen bei Bedarf mehr Kontrolle zu geben (https://docs.microsoft.com/en-us/ef/core/querying/raw-sql).

Alle 26 Kommentare

Wenn Sie kein Fan von ORMs (Object Relation Mappers) wie EntityFramework sind, können Sie die SQL mit ADO.NET von Hand schreiben. Sie können auch ein leichtes ORM wie Dapper verwenden, das keine Abfragen generiert (Sie können sie von Hand schreiben). EntityFramework verfügt auch über eine ExecuteSQL-Methode, um Ihnen bei Bedarf mehr Kontrolle zu geben (https://docs.microsoft.com/en-us/ef/core/querying/raw-sql).

Wenn MVC für einfache Seiten zu komplex aussieht, probieren Sie Razor Pages aus

Ich empfehle Ihnen dringend, einem der vielen MVC-Tutorials zu folgen. man kann nicht erwarten, etwas wie von Zauberhand zu verstehen, wenn man nur 5 Minuten auf die neue Projektvorlage schaut.

Was die Einfachheit im Vergleich zu Webformularen betrifft, darf ich Sie an das Unglück von viewstate, runat=server und God save us all from the page lifecycle erinnern.
Mit freundlichen Grüße

Das ist lustig.

Scheint mir ziemlich einfach zu sein.

Wenn MVC für einfache Seiten zu komplex aussieht, probieren Sie Razor Pages aus

Habe gerade ein Migrationsprojekt von WebForms -> RazorPages abgeschlossen - Um ehrlich zu sein, hätte es einfach nur MVC sein können, aber definitiv eine gute Option für kleine "seitenzentrierte" Websites. In MVC-Projekten finde ich, dass ich zu viel Code "jage", dh. Ich springe ständig von der Ansicht zum Controller, scrolle durch Unmengen von Aktionen, während ich in RazorPages direkt zu PageModels gehe.

Ich hasse aufgeblähtes EF – Dapper ist so viel einfacher, besonders wenn es mit etwas wie Dapper.FastCRUD verwendet wird

Es sind nicht nur Sie @LJ9999 , MVC und jedes Framework hat nicht alle Antworten. Es ist möglicherweise nicht die beste Struktur, die für Ihr Projekt geeignet ist, und es passt möglicherweise nicht zu Ihrer Denkweise. Sie müssen nicht versuchen, quadratische Stifte in runde Löcher zu stecken, es sei denn, Sie mögen Selbstbestrafung.

MVC ist eine Ihrer Optionen. Bewerten Sie ein paar verschiedene Ansätze und wählen Sie denjenigen aus, der am besten zu Ihnen passt. Finden Sie etwas, das für Sie sinnvoll ist. Finden (oder machen) Sie etwas, in dem Sie am produktivsten sind. Lassen Sie sich nicht von dem beeinflussen, was beliebt ist. Bei Popularität geht es nicht immer um Verdienste, und selbst was für einen Fall ein Verdienst ist, funktioniert anderswo nicht.

Lassen Sie mich also mit Ihnen skeptisch sein, was die gebräuchlichste Art und Weise betrifft, wie Dinge erledigt werden. Skeptisch gegenüber dem Ansatz zu sein, den jeder verfolgt, und kritisch und für sich selbst zu denken, ist ein guter Anfang. Wenn Sie glauben, dass Sie es besser können, können Sie es wahrscheinlich. Tue es!

Für jeden Leser, der dies als Angriff auf sich und seinen gewählten populären Weg empfindet, es ist wirklich kein Angriff auf Sie. Es heißt, finden Sie, was für Sie funktioniert. Und so ist es nur eine Aussage darüber, dass, während Computer alle auf der gleichen Sprache laufen, der Verstand der Menschen dies nicht tut. Jeder ist anders, und das ist großartig.

+1 zu adrett, benutze es.

Warum Sie das Entity Framework verwenden, ist es eine schnelle und einfache Möglichkeit, Ihr gewünschtes Verhalten in derselben Sprache auszudrücken, in der Sie Ihren Code definieren, mit Code-Gen-Unterstützung (sprich: verkürzte Markteinführungszeit). Ich benutze es aber im Allgemeinen nicht, und Sie müssen es auch nicht.

Es scheint, als würden Sie in einem Beispiel eher Probleme mit der Verwendung haben. Die Antwort darauf ist die Zielgruppe: 2019 kennen sich mehr Menschen mit ORM-Paradigmen aus, als tatsächlich mit SQL vertraut sind. SQL ist nicht tot, es hat nur eine Menge starker Konkurrenz mit hoher Durchdringung im jüngeren Entwicklerkontingent.

Als jemand, der jede Iteration von Asp.Net und MVC bis zu dem durchlaufen hat, was wir jetzt mit Asp.Net Core haben, kann ich Ihnen sagen, dass das Debuggen von Fehlern im Seitenlebenszyklus und der Versuch, mit Webformularen etwas von relativer Komplexität zu erstellen, im Vergleich dazu ein Alptraum war zu MVC. WebForms verstecken einen Großteil der eigentlichen Arbeit hinter scheinbar magischen Ereignissen. Es abstrahiert die gesamte Funktionsweise von Webanfragen, indem es versucht, Ihre Hand zu halten und vorzugeben, dass das Web nicht zustandslos ist. Es lügt dich an und sagt dir, dass du hübsch bist und dass dein Hintern in dieser Jeans gut aussieht. Es baut fälschlicherweise Ihr Selbstvertrauen auf und macht Webtechnologien unscharf. Und Sie gehen glücklich Ihrem Tag nach und denken, dass Sie alles tun können, wenn Sie eine Webseite mit einem Formular darauf erstellen und es in einer Tabelle speichern können. Bis Sie diese neue Anforderung erhalten, ein benutzerdefiniertes dynamisches Formular zu erstellen. Oder etwas mit diesem speziellen clientseitigen Framework zum Laufen bringen, weil der Client es hübsch findet. Du merkst, dass du jetzt gegen den Strom arbeitest und fragst dich, wie es alle anderen machen.
MVC ist keine Raketenwissenschaft, es ist ein bewährtes Muster, das sich in der Entwicklergemeinschaft entwickelt hat, nachdem sie erkannt haben, dass es einen besseren Weg geben muss, und jahrelang runde Stifte in quadratische Löcher gesteckt haben. Wenn Sie denken, dass es kompliziert ist, liegt das wahrscheinlich daran, dass Sie auf keines der Probleme gestoßen sind, die es beheben soll, und Sie haben nicht genug Zeit damit verbracht, komplexe Probleme zu lösen. Beginnen Sie mit einfacheren Tutorials, wenn dieses überwältigend ist.
Wenn Sie entscheiden, dass dies nichts für Sie ist, gibt es immer noch PHP oder NodeJs.

Für etwas, das mehr als ein trivialer Join ist, würde ich einfach ExecuteSQL von EF verwenden. Ich denke, Sie könnten die Komplexität unterschätzen, die es darzustellen versucht, da es keine Möglichkeit gibt, Join-Tabellen logisch zu benennen, und es möglicherweise flexibel mit der Bürozuweisung sein muss. Wenn Sie EF nicht mögen, sind Sie nicht allein. Die meisten Benutzer von MVC verwenden wahrscheinlich nicht EF. Das eine braucht das andere nicht.

Persönlich finde ich Webformulare viel komplizierter als MVC, weil sie so viel komplexe Ereignislogik haben, die verschleiert, was eigentlich ein Anfrage-Antwort-Zyklus ist. MVC ist für jemanden, der noch nie darüber nachgedacht hat, zunächst schwierig, weil es ein anderes Organisationsmodell ist, aber nach Jahren der Nutzung scheint die Branche entschieden zu haben, dass MVC auf lange Sicht tatsächlich einfacher ist. Es ist nur eine Frage der Vorlieben, aber ein Ticket wie dieses für eine Technologie zu öffnen, die seit Jahren Mainstream ist, ist nur eine Entlüftung.

Ich empfehle, MVC mit Beispielen zu lernen, die kein Entity-Framework verwenden, damit Sie ein einzelnes Konzept sofort lernen. Allerdings ist dies nicht wirklich der richtige Ort, um darüber zu plaudern.

OMG ich lache gerade so sehr.

Schauen Sie, Kumpel, wenn es zu schwierig oder komplex erscheint, dann treten Sie davon weg und verwenden Sie etwas anderes. Niemand hält dir eine Waffe an den Kopf, richtig?

Einige von uns sind schon ein paar Mal um den Block gegangen und bevorzugen die Einfachheit von asp mvc gegenüber Webformularen, weil wir uns mit dem schrecklichen Haufen von nicht testbarem Spaghetti-Code auseinandersetzen mussten, der aus monolithischen Webformular-Monstrositäten kommt.

Aber im Ernst, wenn Sie Webformulare mögen und jemand bereit ist, Sie dafür zu bezahlen, Webformulare zu programmieren, dann tun Sie es! Und hör auf, über Dinge zu jammern, die du nicht verstehst.

Ist das ein Satirebeitrag? Bin mir nicht sicher ob auf reddit oder github...

Ich habe an der ERP-Entwicklung unter Asp.net-Webformularen und Asp.net MVC für zwei verschiedene Systeme gearbeitet. Ich kann mit Zuversicht sagen, dass die Arbeit an Webformularen eine Qual ist, besonders wenn Sie eine riesige Lösung mit schlechter Architektur haben, und im Gegenteil MVC kann eine hässlich aussehende Architektur auf magische Weise in eine Top-Level-Lösung verwandeln, mit der Fähigkeit, Ebenen zu organisieren und Repository-Muster mit starkem, zuverlässigem ORM wie EF zu nutzen.
Aber ehrlich gesagt leiden die meisten Entwickler, die ich getroffen habe und die sich über MVC beschweren, unter begrenzter Erfahrung und Kenntnis des neuen Musters.
Ich persönlich rate Entwicklern, die MVC von Null bis zum Helden lernen wollen, https://www.pluralsight.com auszuprobieren, anstatt Zeit und Geld für kontroverse Themen und Blogs über MVC zu verschwenden, das in vielen Fällen voreingenommen oder schlecht ist im Kontext.

Wow, dass sich die Zeit für Entwickler geändert hat, ist tatsächlich wahr. Ich habe Microsoft dafür gelobt, wie einfach und geradlinig EF und MVC waren, als ich ihnen 2013 zum ersten Mal begegnete. Wie bereits gesagt wurde, geschieht das Verständnis dieser Frameworks nicht automatisch! Folgen Sie den Tutorials, sehen Sie sich einige der Hunderte von Videos an und versuchen Sie es erneut. Tut mir leid, Mann, aber Sie entwickeln ein Verständnis für diese Dinge, wenn Sie Zeit damit verbringen

Ich stimme dem Autor zu. Für diejenigen, die mvc zum ersten Mal verwenden. Der Ansatz ist nicht so freundlich wie die anderen wie PHP, Rail ... zu viel Konzept, um es vor der Verwendung zu verstehen. Sobald Sie jedoch das Konzept verstanden haben, scheint mvc sehr effektiv zu sein.

Warum sollte jemand Entity Framework hassen? Ich musste in den letzten drei Jahren nicht mehr als 5 SQL-Abfragen schreiben.

Dies ist zwar keine Raketenwissenschaft, aber am Ende steckt etwas Wissenschaft dahinter, und wie bei allem kann es einige Zeit und Mühe erfordern, vollständig zu verstehen, ich bin mit dem ursprünglichen Autor, dass MVC und die Beispiele ein bisschen sind überwältigend, wenn man versucht, alles in einer Sitzung zu verstehen, vielleicht wenn es eine Art Spickzettel gäbe, die man verwenden könnte, wenn man Wissen oder Konzepte aus anderen Frameworks anwendet, könnte das Erlernen von MVC für diejenigen erträglicher werden, die es als Herausforderung empfinden.

Während das Feedback immer geschätzt wird, denn wenn sich jemand beschwert, bedeutet dies, dass es etwas zu verbessern gibt, andererseits, wenn Sie die Beiträge des Autors ein wenig untersuchen, werden Sie feststellen, dass er sehr lautstark ist und viele Dinge mit ihnen vergleicht Raketenwissenschaft.

Einige Beispiele:
https://github.com/dotnet/docs/issues/9115
https://github.com/dotnet/docs/issues/9299
https://github.com/dotnet/docs/issues/9274
https://github.com/dotnet/docs/issues/9234
https://github.com/MicrosoftDocs/azure-docs/issues/20313
https://github.com/dotnet/docs/issues/9396
https://github.com/aspnet/EntityFramework6/issues/671
https://github.com/aspnet/EntityFramework6/issues/686
https://github.com/twbs/bootstrap/issues/27783
https://github.com/MicrosoftDocs/visualstudio-docs/issues/2237
https://github.com/aspnet/EntityFramework.Docs/issues/1254
https://github.com/aspnet/EntityFramework.Docs/issues/1240

Auch wenn die Dinge keine Raketenwissenschaft sind, können sie dennoch kompliziert sein und erfordern Geduld beim Lernen. Mehr über das Thema zu lesen, anstatt sich zu beschweren, dass es zu schwer ist, könnte ein guter Anfang sein.

Es scheint, dass Ihre Probleme nicht mit MVC, sondern mit Entity Framework zusammenhängen. Für einige von uns, die gerne SQL schreiben, fügt Entity Framework eine unerwünschte Abstraktionsebene hinzu. Persönlich verwende ich Dapper, was die Verwendung von Readern viel einfacher macht. Sie können immer noch Ihr eigenes SQL schreiben. MVC ist ein ziemlich einfaches Muster. Es wird etwas schwieriger zu verstehen, wie man Daten ein- und ausgibt und wie man einige der Hilfsfunktionen effektiv nutzt, aber konzeptionell ist es nicht schwierig.

MVC erfordert nicht die Verwendung von EF, obwohl es von der integrierten Benutzerauthentifizierung verwendet wird.

Freunde, kommentiere mit Hilfe oder Positivität, aber nicht mit Spott. Das OP scheint Bedenken mit EF zu haben, und Davids Kommentar ist ausgezeichnet. https://github.com/aspnet/AspNetCore/issues/7039#issuecomment -457869924

Issues ist ein Ort, an dem man helfen kann. Wenn Sie die Vorzüge von MVC gegenüber etwas anderem argumentieren möchten, versuchen Sie es auf einer der anderen beliebten Beschwerdeseiten im Internet.

Hallo, willkommen @LJ9999 Ich wünschte, mehr Leute würden solche Fragen stellen.
Ich beginne damit, zu sagen, dass dies lediglich meine Meinung ist, also fühlen Sie sich frei, ihr ganz oder teilweise zuzustimmen oder nicht zuzustimmen.

Ich stimme vollkommen zu, dass Web-/Softwareentwicklung schwierig ist. Ich persönlich habe Jahre damit verbracht, zu studieren und zu experimentieren, um die Erfahrung zu sammeln, die ich habe. Jedes Mal, wenn ich ein neues Framework oder eine neue Bibliothek verwenden möchte, ist es immer noch schwierig. Es erfordert, dass ich mehr Zeit damit verbringe, wieder zu lernen und zu experimentieren, um mich wohl und sicher zu fühlen, es zu benutzen. Da ich im Laufe der Jahre immer mehr gelernt habe, glaube ich wirklich, dass ich beim Lernen besser und schneller geworden bin, daher wird es einfacher.
Im Laufe der Jahre, denke ich, haben sich die Herausforderungen verändert. Einiges ist einfacher geworden, aber es wurden auch neue Herausforderungen eingeführt. Insgesamt glaube ich jedoch, dass es jetzt viel einfacher ist als zu Beginn. Ich denke auch, dass es weniger frustrierend ist und ich finde es angenehmer.
Abgesehen davon denke ich, dass wir als Branche immer weiter nach Besserem streben können. Ich denke, solche Fragen verdeutlichen die Herausforderungen, denen wir gegenüberstehen, und inspirieren die Notwendigkeit, die Situation weiter zu verbessern.

Ich möchte besonders vorsichtig sein, Ihnen nicht zu raten, eine Lösung der anderen vorzuziehen, da ich nicht glaube, dass es dafür genügend Informationen gibt.
Eine der größten Herausforderungen, die ich bei der Problemlösung finde, ist die Identifizierung des eigentlichen Problems, das gelöst werden soll. Es wäre sehr einfach, dieses Problem als „Erstellen einer Website“ zu kategorisieren, aber mit so vielen Lösungen zur Auswahl, um „eine Website zu erstellen“, könnte jede von ihnen möglicherweise funktionieren. Das Problem muss so weit wie möglich aufgeschlüsselt werden, da dies ein Kriterium darstellt, anhand dessen die verschiedenen Lösungen bewertet werden können.
Zweitens haben wir alle persönliche Vorlieben. Sie haben Anspruch auf Ihre eigene, und niemand kann Ihnen sagen, was Sie bevorzugen oder womit Sie sich wohler fühlen. Dies hängt ganz von Ihnen ab.
Wenn andere beteiligt sind, ein Team oder ein Unternehmen, müssen möglicherweise zusätzliche Faktoren berücksichtigt werden, wie z. B. die Präferenzen des Teams sowie die Richtlinien und Strategien des Unternehmens.
Dies sind nur einige der Faktoren, die bei der Bewertung verschiedener Lösungen berücksichtigt werden müssen.

Eine letzte Sache, die ich ansprechen möchte, ist Ihre Nachricht. Ich denke, es ist nicht spezifisch genug, um zu verstehen, was Sie von einer Antwort erwarten. In meiner Interpretation gibt es viele verschiedene Fragen, auf die Sie versuchen, eine Antwort zu bekommen, und Sie geben Ihre Meinung ab. Diese sind alle gültig und nützlich, aber wenn sie in einem Github-Problem zusammen gestellt und angesprochen werden, ist es schwierig, eine klare und prägnante Antwort zusammenzustellen oder eine Diskussion zu beginnen, um Ihnen die gewünschten Antworten zu geben.
Mein Vorschlag an Sie wäre, es noch einmal zu versuchen und Ihre Fragen oder Meinungen spezifischer zu formulieren. Machen Sie sich keine Sorgen, viele Ausgaben zu eröffnen, wenn sie gut geschrieben und umfassend sind, werden sie viel besser aufgenommen und Sie erhalten mit größerer Wahrscheinlichkeit Antworten auf Ihre Fragen oder werden entsprechend weitergeleitet.

Ich hoffe diese Antwort hilft irgendwie weiter. Seien Sie sich bewusst, dass es viele Menschen gibt, die bereit sind zu helfen, aber es liegt in Ihrer Verantwortung, es jemandem leicht zu machen, Ihnen zu helfen.

@ LJ9999 ein (hoffentlich konstruktiver) Kommentar ...

Aus dem von Ihnen geposteten SQL ist es möglich, dass Sie Entity Framework 6 verwenden. Entity Framework Core (eine neuere Version, die von Grund auf neu geschrieben wurde) hat das ausdrückliche Ziel, vernünftiges, lesbares SQL zu generieren, das versucht, dem zu ähneln, was Sie selbst schreiben würden - Es besteht eine sehr gute Chance, dass Sie etwas Vernünftigeres sehen, wenn Sie es versuchen. Probieren Sie es aus und lassen Sie es uns wissen.

Mein Endkriterium ist einfach ... Anzahl der zu implementierenden Codezeilen. Mehr Code – mehr Fehlerrisiko, größere Lernkurve, mehr verschwendete Stunden (es sei denn, Sie sind ein Auftragnehmer, der nach Stunden abgerechnet wird).
Ich habe ein 8-mal größeres Codevolumen gesehen, als ich mvc mit dem Javascript-Framework gemacht habe. Über Old-School-CSHTML-Seiten. Und 5x mehr Zeit.

Hüten Sie sich vor denen, die den Ausdruck "richtiger Weg" verwenden

MVC als Softwarearchitektur ist Ihnen in diesem Fall hilfreicher.
M ist das Modell, das Ihre Datenbank sein könnte, es kann auf Informationsanfragen reagieren, auf Anweisungen reagieren, um den Zustand seiner Informationen zu ändern, und sogar Beobachter in ereignisgesteuerten Systemen benachrichtigen, wenn sich Informationen ändern.
V ist die Ansicht, die effektiv das Benutzeroberflächenelement der Anwendung bereitstellt. Es rendert Daten aus dem Modell in eine Form, die für die Benutzeroberfläche geeignet ist.
C ist der Controller, der Benutzereingaben empfängt und Aufrufe zum Modellieren von Objekten oder zum Rendern der Ansicht durchführt.

Ihre Wahl des Tech-Stacks bedeutet nicht, dass MVC gut oder schlecht ist, es ist nur eine Softwarearchitektur.

@hanselman

Freunde, kommentiere mit Hilfe oder Positivität, aber nicht mit Spott. Das OP scheint Bedenken mit EF zu haben, und Davids Kommentar ist ausgezeichnet. #7039 (Kommentar)

Ich stimme Scott vollkommen zu.

Es ist auch verständlich, dass einige erfahrenere Benutzer einen Titel, der ein großartiges Framework und jahrelange harte Arbeit des ASP.NET-Kernteams und der Community wegzuwischen scheint, als „nicht verwendbar“ in einer einzigen Aussage stark empfinden, obwohl dies der Fall war wahrscheinlich nicht die Absicht. Ich denke, das hat wahrscheinlich den Spott verursacht.

Es kann hilfreich sein, den Titel so zu ändern, dass er dem tatsächlichen Problem entspricht.

Wir schließen regelmäßig „Diskussionsthemen“, die über einen langen Zeitraum nicht aktualisiert wurden.

Wir entschuldigen uns, falls dies zu Unannehmlichkeiten führt. Sollten Sie weiterhin auf ein Problem stoßen, bitten wir Sie, ein neues Problem mit aktualisierten Informationen zu melden, und wir werden es untersuchen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen