Staatenlos gegen Staatsvoll - Ich könnte einige konkrete Informationen gebrauchen

93

Ich interessiere mich für Artikel, die konkrete Informationen über zustandsloses und zustandsbehaftetes Design in der Programmierung enthalten. Ich bin interessiert, weil ich mehr darüber erfahren möchte, aber ich kann wirklich keine guten Artikel darüber finden. Ich habe Dutzende von Artikeln im Web gelesen, in denen das Thema vage behandelt wird, oder sie sprechen über Webserver und Sitzungen - bei denen es auch um zustandsbehaftete oder zustandslose Entwürfe geht, aber ich interessiere mich für die zustandslose oder zustandsbehaftete Gestaltung von Attributen beim Codieren . Beispiel: Ich habe gehört, dass BL-Klassen von Natur aus zustandslos sind, Entitätsklassen (oder zumindest so nenne ich sie - wie Person (ID, Name, ..)) sind zustandsbehaftet usw.

Ich denke, es ist wichtig zu wissen, weil ich glaube, wenn ich es verstehen kann, kann ich besseren Code schreiben (z. B. Granularität im Auge).

Wie auch immer, ganz kurz, hier ist, was ich über Stateful vs Stateless weiß:

Stateful (wie WinForms): Speichert die Daten zur weiteren Verwendung, schränkt jedoch die Skalierbarkeit einer Anwendung ein, da sie durch CPU- oder Speicherbeschränkungen begrenzt ist

Statuslos (wie ASP.NET - obwohl ASP versucht, mit ViewStates statusbehaftet zu sein): Nach Abschluss der Aktionen werden die Daten übertragen und die Instanz an den Thread-Pool (amorph) zurückgegeben.

Wie Sie sehen können, handelt es sich um ziemlich vage und begrenzte Informationen (und sie konzentrieren sich ganz auf die Serverinteraktion). Ich wäre Ihnen sehr dankbar, wenn Sie mir weitere leckere Informationen liefern könnten :)

Team-JoKi
quelle

Antworten:

58

Ich schlage vor, dass Sie mit einer Frage in StackOverflow beginnen, in der die Vorteile der zustandslosen Programmierung erläutert werden. Dies steht eher im Zusammenhang mit der funktionalen Programmierung, aber was Sie lesen werden, gilt auch für andere Programmierparadigmen.

Die zustandslose Programmierung bezieht sich auf den mathematischen Begriff einer Funktion, die beim Aufruf mit denselben Argumenten immer dieselben Ergebnisse zurückgibt. Dies ist ein Schlüsselkonzept des Paradigmas der funktionalen Programmierung, und ich gehe davon aus, dass Sie in diesem Bereich viele relevante Artikel finden werden.

Ein weiterer Bereich, den Sie erforschen könnten, um mehr Verständnis zu erlangen, sind RESTful-Webdienste. Diese sind von Natur aus "zustandslos", im Gegensatz zu anderen Webtechnologien, die versuchen, den Status irgendwie aufrechtzuerhalten. (Tatsächlich ist das, was Sie sagen, dass ASP.NET zustandslos ist, nicht korrekt. ASP.NET ist bemüht, den Status mithilfe von ViewState beizubehalten, und ist definitiv als statusbehaftet zu kennzeichnen. ASP.NET MVC ist dagegen eine zustandslose Technologie.) Es gibt viele Orte, an denen "Staatenlosigkeit" von RESTful-Webdiensten diskutiert wird (wie dieser Blog-Spot), aber Sie könnten wieder von einer SO- Frage ausgehen .

kgiannakakis
quelle
Okay, danke für die Info, ich habe mir den Link angesehen und einige interessante Informationen gefunden! Obwohl ich noch offen für mehr bin;)
Team-JoKi
Ich habe einen weiteren Bereich hinzugefügt, in dem Stateful und Stateless ein wichtiger Faktor sind (RESTful Web Services).
kgiannakakis
Danke für die Information! Ich würde Ihre Antwort abstimmen, aber ich habe noch nicht genug Vertreter> _>
Team-JoKi
Viele Web-Apps sind vollständig, da dieselbe Anmeldeseite unterschiedliche Ergebnisse für Benutzeranmeldeinformationen liefert. Die erstmalige Anmeldung ist erfolgreich. Das zweite Mal mit derselben Eingabe schlägt die Anmeldung fehl. Es kann eine Datenbank oder ein anderer Speicher sein
fühlen Sie sich gut und programmieren Sie am
83

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.

Stateful bedeutet, dass es eine Erinnerung an die Vergangenheit gibt. Frühere Transaktionen werden gespeichert und können sich auf die aktuelle Transaktion auswirken.

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;
}

Siehe unter: /software/101337/whats-the-difference-between-stateful-and-stateless

Ankit
quelle
73

Eine zustandsbehaftete App speichert Informationen darüber, was seit dem Start passiert oder geändert wurde. Alle öffentlichen Informationen darüber, in welchem ​​"Modus" es sich befindet oder wie viele Datensätze verarbeitet wurden oder was auch immer, machen es zustandsbehaftet.

Zustandslose Apps legen keine dieser Informationen offen. Sie geben jedes Mal dieselbe Antwort auf dieselbe Anforderung, Funktion oder denselben Methodenaufruf. HTTP ist in seiner Rohform zustandslos. Wenn Sie eine bestimmte URL abrufen, erhalten Sie (theoretisch) jedes Mal dieselbe Antwort. Die Ausnahme ist natürlich, wenn wir anfangen, Statefulness hinzuzufügen, z. B. mit ASP.NET-Webanwendungen :) Wenn Sie jedoch an eine statische Website mit nur HTML-Dateien und Bildern denken, wissen Sie, was ich meine.

Lucas Wilson-Richter
quelle
18

Das Adjektiv Stateful oder Stateless bezieht sich nur auf den Zustand der Konversation, es steht nicht im Zusammenhang mit dem Funktionskonzept, das dieselbe Ausgabe für dieselbe Eingabe liefert. In diesem Fall wäre jede dynamische Webanwendung (mit einer Datenbank dahinter) ein Stateful Service, was offensichtlich falsch ist. In diesem Sinne implementiere ich einen statusbehafteten Dienst, wenn ich die Aufgabe anvertraue, den Konversationsstatus in der zugrunde liegenden Technologie beizubehalten (z. B. eine Coockie- oder http-Sitzung), aber wenn alle erforderlichen Informationen (der Kontext) als Parameter übergeben werden. m Implementierung eines zustandslosen Dienstes. Es sollte beachtet werden, dass wir, selbst wenn der übergebene Parameter eine "Kennung" des Konversationsstatus ist (z. B. ein Ticket oder eine Sitzungs-ID), immer noch unter einem zustandslosen Dienst arbeiten.

Marco
quelle
Ich bin mir nicht sicher, ob die Weitergabe einer session identifierAnfrage als zustandslos angesehen werden kann. Meiner Ansicht nach würde ein solcher Fall als zustandsbehaftet angesehen. Wenn Sie jedoch immer ein tokenfür den Benutzer übergeben, aber keinen anderen Status als den zustandslosen Status beibehalten. Fühlt sich aber zustandsbehaftet XD. Das ist so verwirrend.
7hi4g0
4

Online von einem Konto auf ein anderes Konto überwiesenes Geld ist zustandsbehaftet, da das empfangende Konto Informationen über den Absender enthält. Bei der Übergabe von Bargeld von einer Person an eine andere Person ist diese Transaktion zustandslos, da nach Erhalt des Bargeldes die Identität des Gebers mit dem Bargeld nicht vorhanden ist.

S Upendra rao
quelle
1

Nur um die Beiträge anderer hinzuzufügen ... Eine andere Möglichkeit besteht darin, sie aus der Sicht eines Webservers und der Parallelität zu betrachten ...

HTTP ist aus einem bestimmten Grund zustandslos ... Im Fall eines Webservers bedeutet Stateful , dass er sich den Status eines Benutzers für seine letzte Verbindung merken und / oder eine offene Verbindung zu einem Anforderer aufrechterhalten muss. Das wäre in einer Anwendung mit Tausenden von gleichzeitigen Verbindungen sehr teuer und "stressig" ...

Wenn Sie in diesem Fall zustandslos sind, werden Ressourcen offensichtlich effizient genutzt. Das heißt, Sie unterstützen eine Verbindung in einer einzelnen Instanz von Anforderung und Antwort. Kein Aufwand, Verbindungen offen zu halten und / oder sich an etwas aus der letzten Anforderung zu erinnern.

Ken.Fukizi
quelle
-3

Wir machen Webapps statusbehaftet, indem wir das zustandslose HTTP-Verhalten mithilfe von Sitzungsobjekten überschreiben. Wenn wir Sitzungsobjekte verwenden, wird der Status übertragen, aber wir verwenden weiterhin nur HTTP.

Wohlfühlen und Programmieren
quelle
-3

Ich hatte den gleichen Zweifel an Stateful V / S Stateless Class Design und recherchierte. Gerade fertiggestellt und meine Ergebnisse wurden in meinem Blog veröffentlicht

  • Entitätsklassen müssen zustandsbehaftet sein
  • Die Helfer- / Arbeiterklassen sollten nicht zustandsbehaftet sein.
Joy George Kunjikkuru
quelle