In den Büchern und der Dokumentation der MVC werden nur noch die Begriffe Stateful und Stateless verwendet. Um ehrlich zu sein, kann ich einfach nicht verstehen, wovon die Bücher sprechen. Sie geben kein Beispiel, um einen der beiden Zustände zu verstehen, anstatt nur zu sagen, dass HTTP zustandslos ist und mit ASP.NET MVC Microsoft mitmacht. Fehlt mir etwas grundlegendes Wissen, da ich nicht verstehen kann, was zustandsbehaftet ist und warum zustandsbehaftet ist und dasselbe für Staatenlose gilt?
Ein einfaches und kurzes Beispiel, das sich auf ein Steuerelement wie eine Schaltfläche oder ein Textfeld bezieht, kann das Verständnis vereinfachen.
quelle
Zustandslos - Es gibt keinen Speicher (Status), der vom Programm verwaltet wird
Stateful - Das Programm hat einen Speicher (Zustand)
Um das Konzept des Zustands zu veranschaulichen, werde ich eine Funktion definieren, die zustandsbehaftet und zustandslos ist
Staatenlos
Staatsbürgerlich
Wie andere gesagt haben, ist http von Natur aus zustandslos. Der Status muss also in Ihre Anwendungen integriert werden.
Stellen Sie sich eine Anfrage über das Web vor, bei der ein Client-Browser mit einem Server-Prozess kommuniziert. Um den Status über das zustandslose HTTP-Protokoll aufrechtzuerhalten, sendet der Browser bei jeder Anforderung in der Regel eine Sitzungs-ID an den Server. Für jede Anfrage wird der Server wie "ah, es ist dieser Typ" sein. Statusinformationen können dann im serverseitigen Speicher oder in einer Datenbank basierend auf dieser Sitzungs-ID nachgeschlagen werden.
In einer Umgebung ohne Status benötigen Sie diese Sitzungs-ID nicht. Jede Anfrage würde alle Informationen enthalten, die der Server verarbeiten müsste. Viele Anwendungen müssen jedoch den Status beibehalten, um zu verfolgen, ob eine Sitzung authentifiziert ist oder nicht, um bestimmte Inhalte anzuzeigen oder um zu verfolgen, was ein Benutzer gerade tut. Sie möchten Benutzeranmeldeinformationen nicht für jede Anforderung drahtlos senden.
quelle
Staatenlos heißt, es gibt keine Erinnerung an die Vergangenheit. Jede Transaktion wird so ausgeführt, als würde sie zum ersten Mal ausgeführt.
statefull bedeutet, dass es eine Erinnerung an die Vergangenheit gibt. Vorherige Transaktionen werden gespeichert und können sich auf die aktuelle Transaktion auswirken.
quelle
Meiner einfachen Meinung nach kann der Unterschied zwischen ASP.NET (Stateful) und ASP.NET-MVC (Stateless) auf die Tatsache beschränkt werden, dass das erste serverseitige Steuerelemente bereitstellt und das andere nicht.
Es ist erwähnenswert, dass der ASP.NET-Ansatz für Webformulare darauf abzielt, alte VB- und VC ++ - Programmierer, die im ereignismodellgesteuerten Modell verwendet werden, zu überführen, um auf einfache Weise die Webprogrammierung nach dem gleichen Ereignismodell-Paradigma wie beim Klicken zu erlernen ein knopf und voila du löst ein ereignis aus! Jetzt müssen Sie nur noch Ihren Code in den Event-Handler schreiben. Aus diesem Grund musste ASP.NET über Konzepte wie Ansichtsstatus und Postbacks verfügen, um den Status der serverseitigen Steuerelemente für jeden Roundtrip zu überwachen.
ASP.NET-MVC verwendet jedoch keine serverseitigen Steuerelemente, sodass der Status nicht beibehalten werden muss. Das MVC-Modell teilt die Problemdomäne in drei Partitionen auf, sodass die Daten rationalisiert an den Client übermittelt werden.
Zusammenfassend lässt sich sagen, dass die serverseitigen Steuerelemente sich insofern unterscheiden, als sie statusbehaftet und zustandslos sind.
quelle
Zusatz zu @coder genaue Antwort.
Die Idee des Staates ist, sich an frühere Daten zu erinnern .
Beispielsweise haben Sie auf dem Server ein Listensteuerelement mit den Werten "A, B, C" und "A" ausgewählt. Die Liste geht an den Client-Browser. Sie wählen "B". Und poste zurück auf den Server. Woher wissen Sie, dass sich der Wert ändert?
ASP.NET
Microsoft verwendet in ASP.NET den Begriff ViewState . Es gibt ein großes Missverständnis unter den Entwicklern.
ViewState enthält den gesamten Anfangszustand der Liste in
<input type="hidden" value="base64 encoded" />
: Werten "A, B, C" und der Markierung "A ist ausgewählt".Dann sendet der Post-Back-Browser ViewState und "B ist ausgewählt" an den Server. ASP.NET stellt den Anfangszustand der Liste wieder her und wendet die neue Auswahl "B" an. Dies geschah, um WinForms-Entwickler anzulocken (von @Ronald erwähnt). Auf dem Webserver können Sie Listenänderungen abonnieren
listObject.Changed += OnChanged
.ASP.NET MVC
Das Problem mit ViewState ist die Größe. Seit Jahren sind .NET-Entwickler gezwungen, Kilobyte nutzloser Informationen zu übertragen, z. B. Zustände von 20 Steuerelementen für jede Rundreise.
Der neue Ansatz besteht darin, nur einen neuen und kleinen "B" -Wert zu senden.
Oder wenn Sie den Wechsel von "A" nach "B" verfolgen möchten, implementieren Sie ihn selbst. Verwenden Sie Javascript und senden Sie "Was A, Now B". Oder speichern Sie den Status und rufen Sie ihn über die ID in SQL Server ab.
quelle
Eine zustandsbehaftete Operation ändert oder erfordert einen bestimmten Zustand des Systems, eine zustandslose Operation nicht.
Ein Beispiel für ein statusbehaftetes Textfeld wäre ein zuvor bearbeiteter Kommentar in StackExchange. Das Textfeld muss Ihren vorherigen Kommentar anzeigen und den Post-Thread kennen, mit dem es verknüpft war, um Ihre Eingabe zu akzeptieren und zu verarbeiten.
Ein generisches E-Mail-Kommentarformular mit einem mailto: -Tag ist ein zustandsloses Textfeld. Es akzeptiert Ihre Eingaben und gibt sie an die E-Mail-Anwendung Ihrer Workstation weiter, ohne dass Informationen gespeichert werden.
quelle