Les livres et la documentation sur le MVC ne font que s'ajouter à l'utilisation des termes Stateful et Stateless. Pour être honnête, je ne peux tout simplement pas saisir l'idée de ce dont parlent les livres. Ils ne donnent pas d'exemple pour comprendre l'un ou l'autre de ces états, plutôt que de simplement dire que HTTP est sans état et qu'avec ASP.NET MVC, Microsoft s'en tient à cela. Est-ce que je manque des connaissances fondamentales, car je ne peux pas comprendre ce qui est stateful et pourquoi?
Un exemple simple et court qui parle d’un contrôle comme un bouton ou une zone de texte peut être simplifier la compréhension, je suppose.
la source
Sans état - Il n'y a pas de mémoire (état) gérée par le programme
Stateful - Le programme a une mémoire (état)
Pour illustrer le concept d'état, je définirai une fonction qui est stateful et une qui est sans état
Apatride
Stateful
Comme d'autres l'ont dit, http est intrinsèquement sans état. Donc, l'état doit être intégré à vos applications.
Imaginez une requête sur le Web dans laquelle un navigateur client communique avec un processus serveur. Pour conserver l'état sur le protocole http sans état, le navigateur envoie généralement un identifiant de session au serveur à chaque demande. Pour chaque requête, le serveur ressemblera à "ah, c'est ce gars-là". Les informations d'état peuvent ensuite être consultées dans la mémoire côté serveur ou dans une base de données en fonction de cet identifiant de session.
Dans un environnement purement sans état, vous n'avez pas besoin de cet identifiant de session. Chaque demande contiendrait toutes les informations que le serveur devrait traiter. Cependant, de nombreuses applications doivent conserver leur état pour savoir si une session est authentifiée ou non, pour afficher certains contenus ou pour savoir ce que fait l'utilisateur. Vous ne voudriez pas envoyer les informations d'identification de l'utilisateur par le fil pour chaque demande.
la source
apatrides 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.
statefull 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.
la source
À mon avis, la différence entre ASP.NET (avec état) et ASP.NET-MVC (sans état) peut être isolée au fait que le premier fournit des contrôles côté serveur et que l’autre ne le fait pas.
Il convient de noter que l’approche des formulaires Web ASP.NET est axée sur la transition des anciens programmeurs VB et VC ++ qui sont utilisés dans le modèle piloté par le modèle d’événement pour disposer d’un moyen rapide et efficace d’apprentissage de la programmation Web en suivant le même paradigme de modèle d’événement. un bouton et voila vous déclenchez un événement! Tout ce que vous avez à faire maintenant, c’est d’écrire votre code dans le gestionnaire d’événements. En raison de cela, ASP.NET avait besoin de concepts tels que l'état d'affichage et les publications pour surveiller l'état des contrôles côté serveur à chaque aller-retour.
ASP.NET-MVC, cependant, n'utilise pas de contrôles côté serveur, il n'est donc pas nécessaire de maintenir l'état. Le modèle MVC sépare le domaine posant problème en trois partitions afin que les données soient livrées au client de manière rationalisée.
En résumé, les contrôles côté serveur sont ce qui les différencie dans la mesure où ils sont statiques et sans état.
la source
Ajout à la réponse exacte de @coder.
L'idée d'état est de se souvenir des données précédentes .
Par exemple, vous avez un contrôle de liste sur le serveur avec les valeurs "A, B, C" et "A" sélectionnées. La liste va au navigateur client. Vous sélectionnez "B". Et poster de nouveau sur le serveur. Comment sauriez-vous que la valeur est changée?
ASP.NET
Microsoft utilise le terme ViewState dans ASP.NET. Il existe un énorme malentendu parmi les développeurs à ce sujet.
ViewState conserve tous les états initiaux de la liste en
<input type="hidden" value="base64 encoded" />
: valeurs "A, B, C" et marque "A est sélectionné".Ensuite, avec le postback, le navigateur envoie ViewState et "B est sélectionné" au serveur. ASP.NET restaure l'état initial de la liste et applique la nouvelle sélection "B". Cela a été fait pour attirer les développeurs WinForms (mentionné par @Ronald). Sur le serveur Web, vous pouvez vous abonner à la liste des modifications
listObject.Changed += OnChanged
.ASP.NET MVC
Le problème avec ViewState est la taille. Pendant des années, les développeurs .NET ont été contraints de transférer des kilo-octets d'informations inutiles, comme des états de 20 contrôles pour chaque aller-retour.
La nouvelle approche consiste à n’envoyer que les nouvelles et petites valeurs "B".
Ou si vous souhaitez suivre le changement de "A" à "B", mettez-le en œuvre par vous-même. Utilisation de javascript et envoi de "Was A, Now B". Ou enregistrez et récupérez l'état par ID dans SQL Server.
la source
Une opération avec état modifie ou nécessite un état du système, contrairement à une opération sans état.
Exemple de zone de texte avec état: un commentaire précédemment modifié sur StackExchange - la zone de texte doit afficher votre commentaire précédent et connaître le post-thread dans lequel elle était impliquée pour accepter et traiter votre entrée.
Un formulaire de commentaire générique contenant une balise mailto: serait une zone de texte sans état. Il acceptera votre saisie et la jettera dans l'application de messagerie de votre poste de travail sans conserver aucune information.
la source