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 à ce sujet, mais je ne peux vraiment pas trouver de bons articles à ce sujet. J'ai lu des dizaines d'articles sur le Web qui traitent vaguement du sujet, ou encore de serveurs et de sessions Web, qui traitent également de l'état avec état ou sans état, mais je m'intéresse à la conception sans attributs et sans état des attributs de codage. . Exemple: j'ai entendu dire que les classes BL sont sans état de par leur conception, les classes d'entités (ou au moins ce que je les appelle, comme Person (id, name, ..)) ont un état, etc.
Je pense qu’il est important de savoir, car si je peux le comprendre, je peux écrire un meilleur code (par exemple, une granularité à l’esprit).
Quoi qu'il en soit, très brièvement, voici ce que je sais à propos de stateful vs apatride:
Stateful (comme WinForms): stocke les données pour une utilisation ultérieure, mais limite l'évolutivité d'une application, car elle est limitée par les limites de l'UC ou de la mémoire.
Sans état (comme ASP.NET - bien que ASP essaie d'être dynamique 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 serveur), je vous serais donc très reconnaissant de bien vouloir me fournir des informations plus savoureuses :)
Je vous suggère de commencer par une question dans StackOverflow qui traite des avantages de la programmation sans état. C’est davantage dans le contexte de la programmation fonctionnelle, mais ce que vous allez lire 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 j’espère que vous pourrez trouver de nombreux articles pertinents dans ce domaine.
Les services Web RESTful constituent un autre domaine dans lequel vous pouvez effectuer des recherches pour mieux comprendre. Celles-ci sont par nature "sans état", contrairement à d'autres technologies Web qui tentent en quelque sorte de conserver l'état. (En fait, ce que vous dites que ASP.NET est sans état n'est pas correct - ASP.NET s'efforce de conserver l'état à l'aide de ViewState et doit absolument être qualifié d'état. ASP.NET MVC est une technologie sans état). Il existe de nombreux endroits où l'on discute de "l'apatridie" des services Web RESTful (comme this blog spot), mais vous pouvez à nouveau partir d'un SO question .
Un stateful app est une application qui stocke des informations sur ce qui s'est passé ou sur ce qui a changé depuis son exécution. Toute information publique sur son "mode", le nombre d'enregistrements traités, ou autre, le rend dynamique.
Sans état les applications n'exposent aucune de ces informations. Ils donnent la même réponse à la même demande, fonction ou méthode, à chaque fois. HTTP est sans état dans sa forme brute - si vous effectuez une opération GET sur une URL particulière, vous obtenez (théoriquement) la même réponse à chaque fois. L'exception est bien sûr lorsque nous commençons à ajouter de l'état sur le dessus, par exemple. avec les applications Web ASP.NET :) Mais si vous pensez à un site Web statique ne contenant que des fichiers HTML et des images, vous comprendrez ce que je veux dire.
Stateless signifie qu'il n'y a pas de mémoire du passé. Chaque transaction est effectuée comme si elle était effectuée pour la toute première fois.
Stateful signifie qu'il existe une mémoire du passé. Les transactions précédentes sont mémorisées et peuvent affecter la transaction en cours.
Apatride:
// The state is derived by what is passed into the function
function int addOne(int number)
{
return number + 1;
}
Stateful:
// The state is maintained by the function
private int _number = 0; //initially zero
function int addOne()
{
_number++;
return _number;
}
L'adjectif Stateful ou Stateless ne fait référence qu'à l'état de la conversation, ce n'est pas en relation avec le concept de fonction qui fournit la même sortie pour la même entrée. Dans ce cas, toute application Web dynamique (avec une base de données) constituerait un service avec état, ce qui est évidemment faux. Dans cet esprit, si je confie la tâche de conserver l’état conversationnel à la technologie sous-jacente (telle qu'une session coockie ou http), je mets en place un service avec état, mais si toutes les informations nécessaires (le contexte) sont transmises paramètres J'implémente un service sans état ..__ Il convient de noter que, même si le paramètre transmis est un "identificateur" de l'état conversationnel (par exemple, un ticket ou un ID de session), nous fonctionnons toujours sous un service sans état, car la conversation est sans état (le ticket est continuellement passé entre le client et le serveur), et les deux points d'extrémité sont-ils, pour ainsi dire, "avec état".
L'argent transféré en ligne entre un compte et un autre compte a un état, car le compte recevant a des informations sur l'expéditeur . Céder de l'argent d'une personne à une autre personne, cette transaction est sans statut, car après réception de l'argent, l'identité du donneur n'est pas là avec l'argent.
Juste pour ajouter les contributions des autres ... Une autre façon de le regarder depuis un serveur Web et le point de vue de la simultanéité ...
HTTP est de nature apatride pour une raison ... Dans le cas d'un serveur Web, être stateful signifie qu'il devrait mémoriser "l'état" de l'utilisateur pour sa dernière connexion et/ou conserver une connexion ouverte à un demandeur. Ce serait très coûteux et "stressant" dans une application avec des milliers de connexions simultanées ...
Être sans état dans ce cas a une utilisation efficace évidente des ressources ... c'est-à-dire prendre en charge une connexion dans une seule instance de demande et de réponse ... Pas de surcharge de garder les connexions ouvertes et/ou de rien mémoriser de la dernière demande. ..
Nous réalisons des applications Web en remplaçant le comportement HTTP sans état en utilisant des objets de session. Lorsque nous utilisons des objets de session, l'état est porté mais nous n'utilisons toujours que HTTP.
J'ai eu le même doute sur la conception de classes sans état avec étatful v/s et j'ai fait des recherches. Je viens de terminer et mes conclusions ont été publiées dans mon blog