Os livros e a documentação no MVC apenas se valem do uso dos termos Stateful e Stateless. Para ser sincero, sou incapaz de entender a idéia, do que os livros estão falando. Eles não dão um exemplo para entender nenhum dos dois estados, em vez de apenas dizer que o HTTP é sem estado e com o ASP.NET MVC a microsoft o acompanha. Estou perdendo algum conhecimento fundamental, pois não consigo entender o que é stateful e por que é stateful e o mesmo vale para apátridas.
Um exemplo simples e curto que fala sobre um controle como botão ou caixa de texto pode simplificar o entendimento que suponho.
fonte
Sem estado - Não há memória (estado) mantida pelo programa
Com estado - o programa tem uma memória (estado)
Para ilustrar o conceito de estado, definirei uma função com monitoração de estado e outra sem estado
Stateless
Stateful
Como outros já disseram, o http é inerentemente sem estado. Portanto, o estado deve ser incorporado aos seus aplicativos.
Imagine uma solicitação pela Web em que você tenha um navegador cliente se comunicando com um processo do servidor. Para manter o estado sobre o protocolo http sem estado, o navegador envia normalmente um identificador de sessão ao servidor em cada solicitação. Para cada solicitação, o servidor será "ah, é esse cara". As informações de estado podem ser pesquisadas na memória do servidor ou em um banco de dados com base nessa identificação de sessão.
Em um ambiente puramente sem estado, você não precisaria desse ID de sessão. Cada solicitação conteria todas as informações que o servidor precisaria processar. Mas muitos aplicativos precisam manter o estado para controlar se uma sessão está ou não autenticada para exibir determinado conteúdo ou para acompanhar o que um usuário está fazendo. Você não deseja enviar credenciais de usuário por fio para cada solicitação.
fonte
apátrida significa que não há memória do passado. Toda transação é executada como se estivesse sendo realizada pela primeira vez.
statefull significa que há memória do passado. As transações anteriores são lembradas e podem afetar a transação atual.
fonte
Na minha opinião simples, a diferença entre ASP.NET (com estado) e ASP.NET-MVC (sem estado) pode ser isolada pelo fato de o primeiro fornecer controles do lado do servidor e o outro não.
Vale ressaltar que a abordagem de formulários da Web do ASP.NET é voltada para a transição de programadores antigos de VB e VC ++ que são usados no modelo orientado ao modelo de evento para ter uma boa maneira rápida de aprender programação da Web seguindo o mesmo paradigma de modelo de evento, como você clica em um botão e pronto você aciona um evento! Tudo que você precisa fazer agora é escrever seu código no manipulador de eventos. Por isso, o ASP.NET precisava ter conceitos como exibir estado e postbacks para monitorar o estado dos controles do lado do servidor a cada ida e volta.
O ASP.NET-MVC, no entanto, não usa controles do lado do servidor para não precisar manter o estado. O modelo MVC separa o domínio do problema nas três partições para que os dados sejam entregues ao cliente de maneira simplificada.
Em resumo, os controles do lado do servidor são o que os torna diferentes na medida em que são estatais e sem estado.
fonte
Adição à resposta exata do @coder.
A idéia de estado é lembrar dados anteriores .
Por exemplo, você tem um controle de lista no servidor com os valores "A, B, C" e "A" selecionados. A lista vai para o navegador do cliente. Você seleciona "B". E poste de volta no servidor. Como você saberia que o valor foi alterado?
ASP.NET A
Microsoft usa o termo ViewState no ASP.NET. Há um enorme mal-entendido entre os desenvolvedores sobre isso.
O ViewState mantém todo o estado inicial da lista em
<input type="hidden" value="base64 encoded" />
: valores "A, B, C" e marca "A está selecionado".Em seguida, o navegador de postagem envia o ViewState e "B está selecionado" para o servidor. O ASP.NET restaura o estado inicial da lista e aplica a nova seleção "B". Isso foi feito para atrair os desenvolvedores do WinForms (mencionados por @Ronald). No servidor da web, você pode se inscrever para listar as alterações
listObject.Changed += OnChanged
.ASP.NET MVC
O problema com o ViewState é o tamanho. Durante anos, os desenvolvedores .NET foram forçados a transferir kilobytes de informações inúteis, como estados de 20 controles para cada ida e volta.
A nova abordagem é enviar apenas novos e pequenos valores "B".
Ou, se você deseja acompanhar a alteração de "A" para "B", implemente-a por conta própria. Usando javascript e enviando "Era A, Agora B". Ou salve e recupere o estado por ID no SQL Server.
fonte
Uma operação com estado modifica ou requer algum estado do sistema e uma operação sem estado não.
Um exemplo de uma caixa de texto com estado seria um comentário editado anteriormente no StackExchange - a caixa de texto precisa exibir seu comentário anterior e conhecer o segmento posterior ao qual ele estava envolvido para aceitar e processar sua entrada.
Um formulário de comentário de email genérico com uma tag mailto: seria uma caixa de texto sem estado - ele aceita sua entrada e a lança no aplicativo de email da estação de trabalho sem reter nenhuma informação.
fonte