Pregunta

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 al respecto, 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 'estados en estado vs estancados, pero estoy interesado en el diseño de atributos sin estado de estado de los atributos en la codificación . Ejemplo: he oído que las clases de BL son estatales por diseño, clases de entidad (o al menos eso es lo que los llamo, como persona (id, nombre, ..)) son con estado, etc.

Creo que es importante saberlo, porque creo que si puedo entenderlo, puedo escribir un mejor código (por ejemplo, granularidad en mente).

De todos modos, realmente corto, esto es lo que sé 'Bout Stateful vs Stiteless:

Estado (como WinForms): almacena los datos para un uso posterior, pero limita la escalabilidad de una aplicación, porque está limitado por la CPU o los límites de memoria

Sin estado (como ASP.NET, aunque ASP intenta ser con el estado con los estados de vista): después de que se completen las acciones, los datos se transfieren y la instancia se devuelve al grupo de subprocesos (amorfo).

Como puede ver, es una información bastante vaga y limitada (y bastante enfocada en la interacción del servidor), por lo que estaría realmente agradecido si pudiera proporcionarme algunos fragmentos de información más sabrosos :)

¿Fue útil?

Solución

Te sugiero que comiences desde un pregunta en Stackoverflow que analiza las ventajas de la programación sin estado. Esto está más en el contexto de la programación funcional, pero lo que leerá también se aplica en otros paradigmas de programación.

La programación sin estado está relacionada con la noción matemática de una función, que cuando se llama con los mismos argumentos, siempre devuelve los mismos resultados. Este es un concepto clave del paradigma de programación funcional y espero que pueda encontrar muchos artículos relevantes en esa área.

Otra área que podría investigar para obtener más comprensión son los servicios web RESTful. Estos son por diseño "sin estado", en contraste con otras tecnologías web que intentan de alguna manera mantener el estado. (De hecho, lo que dice que ASP.NET es estatoso no es correcto: ASP.NET intenta mantener el estado usando ViewState y definitivamente se caracterizarán como con estado. ASP.NET MVC, por otro lado, es una tecnología sin estado). Hay muchos lugares que discuten la "apatridia" de los servicios web RESTful (como este lugar de blog), pero podrías comenzar de nuevo desde un SO pregunta.

Otros consejos

Apátrida significa que no hay memoria del pasado. Cada transacción se realiza como si se hiciera por primera vez.

De estado significa que hay memoria del pasado. Se recordan las transacciones anteriores y pueden afectar la transacción actual.

Apátrida:

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

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

Estado:

// The state is maintained by the function

private int _number = 0; //initially zero

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

Consulte: https://softwareEngineering.stackexchange.com/questions/101337/whats-the-diferference-between-stateful-and-satrey

A de estado La aplicación es una 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 ha procesado, o lo que sea, lo hace con el estado.

Apátrida Las aplicaciones no exponen ninguna información. Dan la misma respuesta a la misma solicitud, función o llamada de método, cada vez. HTTP es estatoso en su forma bruta: si realiza una URL en particular, obtienes (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 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.

El adjetivo con estado o sin estado se refiere solo al estado de la conversación, no está en relació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, que obviamente es falso. Con esto en mente, si confío la tarea de mantener el estado de conversación en la tecnología subyacente (como una sesión COOCKIE o HTTP), estoy implementando un servicio con estado, pero si toda la información necesaria (el contexto) se aprueba como parámetros I '' m Implementar un servicio sin estado. Cabe señalar que incluso si el parámetro aprobado es un "identificador" del estado de conversación (por ejemplo, un boleto o una sesión de sesión), todavía estamos operando bajo un servicio sin estado, porque la conversación es estatoso (el boleto se pasa continuamente entre el cliente y servidor), y son los dos puntos finales para ser, por así decirlo, "con estado".

Formulario en línea transferido por dinero a otra cuenta es desagradable, porque la cuenta receptora tiene información sobre el remitente. Entectando efectivo de una persona a otra persona, esta transacción no tiene estadísticas, porque después de que el efectivo se retira, la identidad del donante no está allí con el efectivo.

Solo para agregar las contribuciones de los demás ... Otra forma es verlo 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, siendo de estado significa que tendría que recordar el 'estado' de un usuario para su última conexión y /o mantener una conexión abierta a un solicitante. Eso sería muy costoso y "estresante" en una aplicación con miles de conexiones concurrentes ...

Siendo apátrida En este caso, tiene un uso eficiente obvio de recursos ... es decir, admite una conexión en una sola instancia de solicitud y respuesta ... no hay gastos generales de mantener las conexiones abiertas y/o recordar nada de la última solicitud ...

Hacemos que las aplicaciones web estén estancadas al anular el comportamiento de estado de estado HTTP utilizando objetos de sesión. Cuando usamos Session Objets State se lleva a cabo pero todavía usamos solo HTTP.

Tenía la misma duda sobre el diseño de clases sin estado de V/s con estado e investigué un poco. Acabo de completar y mis hallazgos han sido publicados en mi blog

  • Las clases de entidad deben ser con estado
  • Las clases de ayudante / trabajador no deben ser con estado.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top