Estoy interesado en artículos que tengan información concreta sobre el diseño sin estado y con estado en la programación. Estoy interesado porque quiero aprender más sobre él, pero realmente no puedo encontrar ningún buen artículo al respecto. He leído docenas de artículos en la web que discuten vagamente el tema, o están hablando de servidores web y sesiones, que también son sobre estado versus sin estado, pero me interesa el diseño de atributos sin estado versus el diseño de atributos en la codificación. . Ejemplo: he escuchado que las clases BL no tienen estado por diseño, las clases de entidad (o al menos así es como las llamo, como Person (id, name, ..)) tienen estado, etc.
Creo que es importante saberlo, porque creo que si puedo entenderlo, puedo escribir un código mejor (por ejemplo, granularidad en mente).
De todos modos, muy breve, esto es lo que sé sobre stateful vs stateless:
Con estado (como WinForms): almacena los datos para su uso posterior, pero limita la escalabilidad de una aplicación, porque está limitada por límites de CPU o memoria
Sin estado (como ASP.NET, aunque ASP intenta tener estado con ViewStates): una vez que se completan las acciones, los datos se transfieren y la instancia se devuelve al grupo de subprocesos (Amorphous).
Como puede ver, es información bastante vaga y limitada (y bastante centrada en la interacción del servidor), por lo que estaría muy agradecido si pudiera proporcionarme algunos fragmentos de información más sabrosos :)
fuente
Sin estado significa que no hay memoria del pasado. Cada transacción se realiza como si se hiciera por primera vez.
Con estado significa que hay memoria del pasado. Las transacciones anteriores se recuerdan y pueden afectar la transacción actual.
Apátrida:
Con estado:
Consulte desde: /software/101337/whats-the-difference-between-stateful-and-stateless
fuente
Una aplicación con estado es aquella que almacena información sobre lo que sucedió o cambió desde que comenzó a ejecutarse. Cualquier información pública sobre en qué "modo" se encuentra, o cuántos registros se han procesado, o lo que sea, lo convierte en estado.
Las aplicaciones sin estado no exponen ninguna de esa información. Dan la misma respuesta a la misma solicitud, función o llamada de método, siempre. HTTP no tiene estado en su forma sin formato: si realiza un GET a una URL en particular, obtiene (teóricamente) la misma respuesta cada vez. La excepción, por supuesto, es cuando comenzamos a agregar estado en la parte superior, por ejemplo, con las aplicaciones web ASP.NET :) Pero si piensa en un sitio web estático con solo archivos e imágenes HTML, sabrá a qué me refiero.
fuente
El adjetivo Stateful o Stateless se refiere solo al estado de la conversación, no está en conexión con el concepto de función que proporciona la misma salida para la misma entrada. Si es así, cualquier aplicación web dinámica (con una base de datos detrás) sería un servicio con estado, lo que obviamente es falso. Con esto en mente, si confío la tarea de mantener el estado conversacional en la tecnología subyacente (como una sesión de coockie o http), estoy implementando un servicio con estado, pero si toda la información necesaria (el contexto) se pasa como parámetros I ' Estoy implementando un servicio sin estado. Cabe señalar que incluso si el parámetro pasado es un "identificador" del estado conversacional (por ejemplo, un ticket o un sessionId), todavía estamos operando bajo un servicio sin estado,
fuente
session identifier
en cada solicitud puede considerarse apátrida. En mi punto de vista, tal caso se consideraría estatal. Sin embargo, si siempre pasa untoken
para el usuario pero no tiene ningún otro estado que no sea apátrida. Pero se siente con estado XD. Esto es tan confuso.El dinero transferido en línea de una cuenta a otra cuenta con estado, porque la cuenta que recibe tiene información sobre el remitente. Al entregar efectivo de una persona a otra, esta transacción no tiene estatuto, porque después de que se recibe el efectivo, la identidad del donante no está allí con el efectivo.
fuente
Solo para agregar las contribuciones de otros ... Otra forma es mirarlo desde un servidor web y el punto de vista de la concurrencia ...
HTTP es de naturaleza sin estado por una razón ... En el caso de un servidor web, tener estado significa que tendría que recordar el 'estado' de un usuario para su última conexión, y / o mantener una conexión abierta con un solicitante. Eso sería muy caro y 'estresante' en una aplicación con miles de conexiones simultáneas ...
Ser apátrida en este caso tiene un uso eficiente de los recursos ... es decir, admite una conexión en una sola instancia de solicitud y respuesta ... Sin gastos generales de mantener las conexiones abiertas y / o recordar algo de la última solicitud ...
fuente
Hacemos Webapps con estado anulando el comportamiento sin estado HTTP mediante el uso de objetos de sesión. Cuando usamos objetos de sesión, el estado se lleva pero todavía usamos HTTP solo.
fuente
Tenía la misma duda sobre el diseño de clases stateful versus stateless e investigué un poco. Recién completado y mis hallazgos se han publicado en mi blog.
fuente