117 votes

Stateless vs Stateful (sans état)

Je suis intéressé par les articles qui contiennent des informations concrètes sur la conception sans état et avec état dans la programmation. Je suis intéressé parce que je veux en savoir plus, mais je n'arrive pas à trouver de bons articles à ce sujet. J'ai lu des dizaines d'articles sur le web qui discutent vaguement du sujet, ou qui parlent de serveurs web et de sessions - qui sont aussi des sujets sur l'état ou l'absence d'état, mais je suis intéressé par la conception d'attributs sans état ou avec état dans le codage. Exemple : J'ai entendu dire que les classes BL sont sans état par conception, les classes d'entités (ou du moins c'est ainsi que je les appelle - comme Person(id, name, )) sont avec état, etc.

Je pense qu'il est important de le savoir parce que je crois que si je peux le comprendre, je peux écrire un meilleur code (par exemple, la granularité à l'esprit).

Bref, voici ce que je sais à propos de stateful vs stateless :

avec état (comme WinForms) : Stocke les données en vue d'une utilisation ultérieure, mais limite l'évolutivité d'une application, car elle est limitée par l'unité centrale ou la mémoire.

Sans état (comme ASP.NET - bien qu'ASP essaie d'avoir un état avec ViewStates) : Une fois les actions terminées, les données sont transférées et l'instance est renvoyée au pool de threads (Amorphous).

Comme vous pouvez le constater, il s'agit d'informations assez vagues et limitées (et plutôt axées sur l'interaction avec le serveur), je vous serais donc très reconnaissant si vous pouviez me fournir des éléments d'information plus savoureux :)

109voto

Ankit Points 140

Apatride signifie qu'il n'y a pas de mémoire du passé. Chaque transaction est effectuée comme si c'était la première fois.

État signifie qu'il y a une mémoire du passé. Les transactions antérieures sont mémorisées et peuvent affecter la transaction en cours.

Sans état :

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

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

État :

// The state is maintained by the function

private int _number = 0; //initially zero

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

Se référer à : https://softwareengineering.stackexchange.com/questions/101337/whats-the-difference-between-stateful-and-stateless

77voto

A à l'état pur est une application qui stocke des informations sur ce qui s'est passé ou a changé depuis qu'elle a commencé à fonctionner. Toute information publique sur le "mode" dans lequel elle se trouve, ou sur le nombre d'enregistrements qu'elle a traités, ou autre, fait d'elle une application avec état.

Apatride Les applications n'exposent aucune de ces informations. Elles donnent la même réponse à la même demande, à la même fonction ou au même appel de méthode, à chaque fois. HTTP est sans état dans sa forme brute - si vous faites un GET à une URL particulière, vous obtenez (théoriquement) la même réponse à chaque fois. L'exception, bien sûr, c'est lorsque nous commençons à ajouter des fonctions d'état, par exemple avec les applications web ASP.NET :) Mais si vous pensez à un site web statique avec seulement des fichiers HTML et des images, vous comprendrez ce que je veux dire.

64voto

kgiannakakis Points 62727

Je vous suggère de commencer par un question dans StackOverflow qui discute des avantages de la programmation sans état. Il s'agit plutôt du contexte de la programmation fonctionnelle, mais ce que vous lirez s'applique également à d'autres paradigmes de programmation.

La programmation sans état est liée à la notion mathématique de fonction qui, lorsqu'elle est appelée avec les mêmes arguments, renvoie toujours les mêmes résultats. Il s'agit d'un concept clé du paradigme de la programmation fonctionnelle et je m'attends à ce que vous puissiez trouver de nombreux articles pertinents dans ce domaine.

Les services web RESTful sont un autre domaine que vous pourriez étudier afin de mieux comprendre. Ceux-ci sont, par conception, "sans état", contrairement à d'autres technologies web qui tentent de conserver un état d'une manière ou d'une autre. (En fait, l'affirmation selon laquelle ASP.NET est sans état n'est pas correcte - ASP.NET s'efforce de conserver l'état à l'aide de ViewState et doit être considéré comme un système avec état. ASP.NET MVC, en revanche, est une technologie sans état). Il y a de nombreux endroits qui discutent de l'absence d'état des services web RESTful (comme este ), mais vous pourriez à nouveau partir d'un point SO question .

19voto

Marco Points 61

L'adjectif "Stateful" ou "Stateless" se réfère uniquement à l'état de la conversation, il n'est pas lié au concept de fonction qui fournit la même sortie pour la même entrée. Si c'était le cas, toute application web dynamique (avec une base de données) serait un service avec état, ce qui est évidemment faux. En gardant cela à l'esprit, si je confie la tâche de conserver l'état de la conversation à la technologie sous-jacente (telle qu'une session coockie ou http), j'implémente un service avec état, mais si toutes les informations nécessaires (le contexte) sont transmises en tant que paramètres, j'implémente un service sans état. Il convient de noter que même si le paramètre passé est un "identifiant" de l'état de la conversation (par exemple, un ticket ou un sessionId), nous opérons toujours dans le cadre d'un service sans état, parce que la conversation est sans état (le ticket est continuellement transmis entre le client et le serveur), et que les deux points d'extrémité sont, pour ainsi dire, "sans état".

5voto

S Upendra rao Points 1

Les transferts d'argent en ligne d'un compte à un autre sont des transferts d'état, car le compte destinataire dispose d'informations sur l'expéditeur. La remise d'argent d'une personne à une autre est une transaction sans état, car une fois l'argent reçu, l'identité du donneur n'est pas présente avec l'argent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X