Estou interessado em artigos que têm algumas informações concretas sobre design sem estado e com estado em programação. Estou interessado porque quero aprender mais sobre isso, mas realmente não consigo encontrar nenhum artigo bom sobre isso. Eu li dezenas de artigos na web que discutem vagamente o assunto, ou eles estão falando sobre servidores da web e sessões - que também são sobre com estado versus sem estado, mas estou interessado em design de atributos sem estado versus com estado na codificação . Exemplo: ouvi dizer que as classes BL são sem estado por design, classes de entidade (ou pelo menos é como eu as chamo - como Pessoa (id, nome, ..)) têm estado, etc.
Eu acho que é importante saber, porque eu acredito que se eu puder entender, posso escrever um código melhor (por exemplo, granularidade em mente).
De qualquer forma, resumindo, aqui está o que eu sei sobre stateful vs stateless:
Stateful (como WinForms): armazena os dados para uso posterior, mas limita a escalabilidade de um aplicativo, porque é limitado por limites de CPU ou memória
Stateless (como ASP.NET - embora ASP tente ser stateful com ViewStates): Depois que as ações são concluídas, os dados são transferidos e a instância é devolvida ao pool de threads (Amorfo).
Como você pode ver, é uma informação muito vaga e limitada (e bastante focada na interação do servidor), então eu ficaria muito grato se você pudesse me fornecer informações mais saborosas :)
fonte
Sem estado significa que não há memória do passado. Cada transação é executada como se fosse a primeira vez.
Stateful significa que há memória do passado. As transações anteriores são lembradas e podem afetar a transação atual.
Sem estado:
Stateful:
Consulte: /software/101337/whats-the-difference-between-stateful-and-stateless
fonte
Um aplicativo com estado é aquele que armazena informações sobre o que aconteceu ou mudou desde que começou a ser executado. Qualquer informação pública sobre em que "modo" está, ou quantos registros foram processados, ou o que quer que seja, torna-o com estado.
Aplicativos sem estado não expõem nenhuma dessas informações. Eles sempre dão a mesma resposta à mesma solicitação, chamada de função ou método. O HTTP não tem estado em sua forma bruta - se você fizer um GET para uma URL específica, obterá (teoricamente) a mesma resposta todas as vezes. A exceção, é claro, é quando começamos a adicionar statefulness no topo, por exemplo, com aplicativos da web ASP.NET :) Mas se você pensar em um site estático com apenas arquivos HTML e imagens, você saberá o que quero dizer.
fonte
O adjetivo com estado ou sem estado se refere apenas ao estado da conversação, não está relacionado ao conceito de função que fornece a mesma saída para a mesma entrada. Nesse caso, qualquer aplicativo da Web dinâmico (com um banco de dados por trás dele) seria um serviço com estado, o que é obviamente falso. Com isso em mente, se eu confiar a tarefa de manter o estado de conversação na tecnologia subjacente (como uma sessão coockie ou http), estou implementando um serviço com estado, mas se todas as informações necessárias (o contexto) forem passadas como parâmetros I ' estou implementando um serviço sem estado. Deve-se notar que mesmo se o parâmetro passado for um "identificador" do estado de conversação (por exemplo, um tíquete ou um sessionId), ainda estamos operando em um serviço sem estado,
fonte
session identifier
em cada solicitação pode ser considerado sem estado. Em meu ponto de vista, tal caso seria considerado com estado. Se, no entanto, você sempre passar umtoken
para o usuário, mas não tiver nenhum outro estado, a não ser que seja sem estado. Mas parece XD com estado. Isso é tão confuso.O dinheiro transferido online de uma conta para outra conta com monitoração de estado, porque a conta que recebe contém informações sobre o remetente. Entregar dinheiro de uma pessoa para outra, esta transação não tem estado, porque depois que o dinheiro é recebido, a identidade do doador não está lá com o dinheiro.
fonte
Apenas para adicionar contribuições de outros ... Outra maneira é olhar para isso de um servidor web e do ponto de vista da concorrência ...
O HTTP é sem estado por natureza por uma razão ... No caso de um servidor web, ser com estado significa que ele teria que se lembrar do 'estado' de um usuário para sua última conexão e / ou manter uma conexão aberta com um solicitante. Isso seria muito caro e 'estressante' em um aplicativo com milhares de conexões simultâneas ...
Ser sem estado , neste caso, tem um uso eficiente e óbvio de recursos ... isto é, suporta uma conexão em uma única instância de solicitação e resposta ... Nenhuma sobrecarga de manter as conexões abertas e / ou lembrar de qualquer coisa da última solicitação ...
fonte
Tornamos Webapps com estado substituindo o comportamento sem estado de HTTP usando objetos de sessão. Quando usamos objetos de sessão, o estado é carregado, mas ainda usamos apenas HTTP.
fonte
Tive a mesma dúvida sobre o design de classes sem estado v / s e fiz algumas pesquisas. Acabei de concluir e minhas descobertas foram postadas em meu blog
fonte