it-swarm.dev

Was ist der Unterschied zwischen staatlich und staatenlos?

In den Büchern und Dokumentationen zur MVC werden nur die Begriffe Stateful und Stateless verwendet. Um ehrlich zu sein, kann ich einfach nicht verstehen, worüber 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 Microsoft mit ASP.NET MVC mitmacht. Vermisse ich einige grundlegende Kenntnisse, da ich nicht verstehen kann, was zustandsbehaftet ist und warum zustandsbehaftet ist, und dasselbe gilt für Staatenlose.

Ein einfaches und kurzes Beispiel, das über ein Steuerelement wie eine Schaltfläche oder ein Textfeld spricht, kann das Verständnis vereinfachen, nehme ich an.

90
Pankaj Upadhyay

Statuslos bedeutet, dass HTTP keine Unterstützung für Status integriert hat. z.B. Sie können nicht speichern, wenn sich ein Benutzer angemeldet oder etwas anderes getan hat.

Die häufigste Lösung besteht darin, Sitzungen zu verwenden, um dieses Problem zu beheben. Dies bedeutet, dass Sie in der Lage sein müssen, in jede Antwort oder Anfrage eine Sitzungskennung aufzunehmen. Dies erfolgt entweder durch Erstellen eines Sitzungscookies oder durch Einfügen der Sitzungskennung in alle Links.

WebForms versucht, all dies transparent zu machen (mithilfe von ViewState), während MVC Sie zwingt, manuell damit umzugehen.

In Ihrem Beispiel haben Sie Schaltflächen und Textfelder erwähnt. Der einfachste Weg, sie ihren Status beibehalten zu lassen, besteht darin, die Veröffentlichung der gesamten Seite zu beenden. MVC hat eine hervorragende Unterstützung für Ajax (über jQuery) und ich schlage vor, dass Sie Ajax verwenden, wenn Sie nur etwas auf der aktuellen Seite tun möchten.

41
jgauffin

Statuslos - Es gibt keinen Speicher (Status), der vom Programm verwaltet wird

Stateful - Das Programm hat einen Speicher (state)

Um das Konzept des Zustands zu veranschaulichen, definiere ich eine Funktion, die zustandsbehaftet und eine, die zustandslos ist

Staatenlos

//The state is derived by what is passed into the function

function int addOne(int number)
{
    return number + 1;
}

Staatsbürgerlich

//The state is maintained by the function

private int _number = 0; //initially zero 

function int addOne()
{
    _number++;
    return _number;
}

Wie andere gesagt haben, ist http von Natur aus zustandslos. Der Status muss also in Ihre Anwendungen integriert sein.

Stellen Sie sich eine Anfrage über das Web vor, bei der ein Client-Browser mit einem Serverprozess kommuniziert. Um den Status über das zustandslose http-Protokoll aufrechtzuerhalten, sendet der Browser normalerweise bei jeder Anforderung eine Sitzungskennung 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 rein zustandslosen Umgebung würden Sie diese Sitzungs-ID nicht benötigen. 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, um bestimmte Inhalte anzuzeigen oder um zu verfolgen, was ein Benutzer tut. Sie möchten nicht für jede Anforderung Benutzeranmeldeinformationen über das Netzwerk senden.

111
coder

staatenlos bedeutet, dass es keine Erinnerung an die Vergangenheit gibt. 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. Frühere Transaktionen werden gespeichert und können sich auf die aktuelle Transaktion auswirken.

70
CWallach

Meiner einfachen Meinung nach kann der Unterschied zwischen ASP.NET (statusbehaftet) und ASP.NET-MVC (zustandslos) dadurch isoliert werden, dass das erste serverseitige Steuerelemente bereitstellt und das andere nicht.

Es ist erwähnenswert, dass der ASP.NET-Webformularansatz auf den Übergang alter VB und VC++ - Programmierer, die im ereignismodellgesteuerten Modell verwendet werden, ausgerichtet ist, um eine gute schnelle Möglichkeit zum Erlernen der folgenden Webprogrammierung zu erhalten Das gleiche Ereignismodell-Paradigma, wie Sie auf eine Schaltfläche klicken und voila, Sie lösen ein Ereignis aus! Jetzt müssen Sie nur noch Ihren Code in den Ereignishandler schreiben. Aus diesem Grund musste ASP.NET über Konzepte wie Ansichtsstatus und Postbacks verfügen, die überwacht werden sollten Der Status der Serverseite steuert jede Hin- und Rückfahrt.

ASP.NET-MVC verwendet jedoch keine serverseitigen Steuerelemente, sodass der Status nicht beibehalten werden muss. Das MVC-Modell unterteilt die Problemdomäne in drei Partitionen, sodass die Daten auf optimierte Weise an den Client übermittelt werden.

Zusammenfassend lässt sich sagen, dass die serverseitigen Steuerelemente sich dadurch unterscheiden, dass sie zustandsbehaftet und zustandslos sind.

3
Ronald

Ergänzung zu @coder genaue Antwort.

Die Idee des Zustands ist, sich zu erinnern vorherige Daten .
Sie haben beispielsweise ein Listensteuerelement auf dem Server mit den Werten "A, B, C" und "A" ausgewählt. Die Liste geht an den Client-Browser. Sie wählen "B". Und zurück auf den Server posten. Woher wissen Sie, dass sich der Wert ändert?

  • ASP.NET
    Microsoft verwendet den Begriff ViewState in ASP.NET. Es gibt ein großes Missverständnis unter Entwicklern darüber.
    ViewState enthält den gesamten Anfangszustand der Liste in <input type="hidden" value="base64 encoded" />: Werte "A, B, C" und Markierung "A ist ausgewählt".
    Dann sendet der Browser mit Post-Back den 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 wurde gemacht, um WinForms-Entwickler anzulocken (erwähnt von @Ronald). Auf dem Webserver können Sie Listenänderungen abonnieren listObject.Changed += OnChanged.

  • ASP.NET MVC
    Das Problem mit ViewState ist die Größe. Jahrelang waren .NET-Entwickler gezwungen, Kilobyte nutzloser Informationen zu übertragen, z. B. Zustände von 20 Steuerelementen für jede Hin- und Rückfahrt.
    Der neue Ansatz besteht darin, nur einen neuen und kleinen "B" -Wert zu senden.
    Oder wenn Sie den Wechsel von "A" zu "B" verfolgen möchten, implementieren Sie ihn selbst. Verwenden Sie Javascript und senden Sie "Was A, Now B". Oder speichern und rufen Sie den Status anhand der ID in SQL Server ab.

  • ASP.NET MVC und ASP.NET implementiert den Status für Authentifizierung und Einlösung. Es ist also nicht richtig zu sagen, dass ASP.NET MVC vollständig zustandslos ist.
  • Speicher in den Antworten erwähnt bedeutet "Erinnern", nicht Computerspeicher. Der Status kann durch Speichern von Daten im Dateisystem, im SQL Server oder im Computerspeicher implementiert werden.
1
Artru

Eine zustandsbehaftete Operation ändert oder erfordert einen bestimmten Status des Systems, eine zustandslose Operation nicht.

Ein Beispiel für ein Stateful-Textfeld wäre ein zuvor bearbeiteter Kommentar zu StackExchange. Das Textfeld muss Ihren vorherigen Kommentar anzeigen und den Post-Thread kennen, an dem es beteiligt 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 wirft sie in die E-Mail-Anwendung Ihrer Workstation, ohne dass Informationen gespeichert werden.

0
lonstar