Los libros y la documentación sobre el MVC simplemente se acumulan al usar los términos con estado y sin estado. Para ser honesto, no puedo entender la idea de lo que hablan los libros. No dan un ejemplo para comprender ninguno de los dos estados, en lugar de simplemente decir que HTTP no tiene estado y que con ASP.NET MVC microsoft lo acompaña. Me estoy perdiendo algunos conocimientos fundamentales, ya que no puedo entender lo que tiene estado y por qué tiene estado y lo mismo ocurre con los apátridas.
Un ejemplo simple y breve que habla de un control como botón o cuadro de texto puede simplificar la comprensión, supongo.
fuente
Sin estado: el programa no mantiene memoria (estado)
Con estado: el programa tiene una memoria (estado)
Para ilustrar el concepto de estado, definiré una función con estado y otra sin estado.
Apátrida
Stateful
Como otros han dicho, http es inherentemente sin estado. Por lo tanto, el estado debe integrarse en sus aplicaciones.
Imagine una solicitud en la web donde tiene un navegador cliente que se comunica con un proceso de servidor. Para mantener el estado sobre el protocolo http sin estado, el navegador generalmente enviará un identificador de sesión al servidor en cada solicitud. Para cada solicitud, el servidor será como "ah, es este tipo". La información de estado se puede buscar en la memoria del lado del servidor o en una base de datos basada en esta identificación de sesión.
En un entorno puramente sin estado, no necesitaría esta identificación de sesión. Cada solicitud contendría toda la información que el servidor necesitaría procesar. Pero muchas aplicaciones necesitan mantener el estado para realizar un seguimiento de si una sesión está autenticada o no para ver cierto contenido o para realizar un seguimiento de lo que está haciendo un usuario. No querrá enviar credenciales de usuario por cable para cada solicitud.
fuente
sin estado significa que no hay memoria del pasado. Cada transacción se realiza como si se hiciera por primera vez.
statefull significa que hay memoria del pasado. Las transacciones anteriores se recuerdan y pueden afectar la transacción actual.
fuente
En mi opinión simple, la diferencia entre ASP.NET (con estado) y ASP.NET-MVC (sin estado) se puede aislar al hecho de que el primero proporciona controles del lado del servidor y el otro no.
Vale la pena señalar que el enfoque de formularios web ASP.NET está orientado a la transición de los antiguos programadores VB y VC ++ que se utilizan en el modelo basado en el modelo de eventos para tener una buena forma rápida de aprender programación web siguiendo el mismo paradigma del modelo de eventos, como hacer clic un botón y listo ¡desencadena un evento! Todo lo que necesita hacer ahora es escribir su código en el controlador de eventos. Debido a eso, ASP.NET necesitaba tener conceptos como ver estado y devoluciones para monitorear el estado de los controles del lado del servidor en cada viaje de ida y vuelta.
ASP.NET-MVC, sin embargo, no utiliza controles del lado del servidor, por lo que no tiene que mantener el estado. El modelo MVC separa el dominio del problema en las tres particiones para que los datos se entreguen al cliente de manera simplificada.
En resumen, los controles del lado del servidor son lo que los hace diferentes en cuanto a ser con estado y sin estado.
fuente
Además de @coder respuesta exacta.
La idea de estado es recordar datos anteriores .
Por ejemplo, tiene un control de lista en el servidor con los valores "A, B, C" y "A" seleccionado. La lista va al navegador del cliente. Usted selecciona "B". Y publicar de nuevo en el servidor. ¿Cómo sabrías que el valor ha cambiado?
ASP.NET
Microsoft usa el término ViewState en ASP.NET. Hay un gran malentendido entre los desarrolladores al respecto.
ViewState contiene todos los estados iniciales de la lista en
<input type="hidden" value="base64 encoded" />
: valores "A, B, C" y marca "A is selected".Luego, con el navegador posterior, envía ViewState y "B está seleccionado" al servidor. ASP.NET restaura el estado inicial de la lista y aplica la nueva selección "B". Esto se hizo para atraer a los desarrolladores de WinForms (mencionado por @Ronald). En el servidor web, puede suscribirse a la lista de cambios
listObject.Changed += OnChanged
.ASP.NET MVC
El problema con ViewState es el tamaño. Durante años, los desarrolladores de .NET se vieron obligados a transferir kilobytes de información inútil, como estados de 20 controles para cada viaje de ida y vuelta.
El nuevo enfoque es enviar solo un nuevo y pequeño valor "B".
O si desea realizar un seguimiento del cambio de "A" a "B", impleméntelo usted mismo. Usando JavaScript y enviando "Was A, Now B". O guarde y recupere el estado por ID en SQL Server.
fuente
Una operación con estado modifica o requiere algún estado del sistema, y una operación sin estado no lo hace.
Un ejemplo de un cuadro de texto con estado sería un comentario editado previamente en StackExchange: el cuadro de texto debe mostrar su comentario anterior y conocer el subproceso en el que estuvo involucrado para aceptar y procesar su entrada.
Un formulario genérico de comentarios por correo electrónico con una etiqueta mailto: sería un cuadro de texto sin estado: acepta su entrada y la arroja a la aplicación de correo de su estación de trabajo sin retener ninguna información.
fuente