Stateless vs. Stateful

Pedro Barros
Exactaworks
Published in
3 min readJul 7, 2021

--

Esse post tem a intenção de fixar esses dois conceitos em que tive um pouco de dificuldade para entender no começo, espero que ele te ajude a entender de forma fácil e prática.

Stateless

Não há memória (estado) que é mantido pelo programa.

No conceito de Stateless nenhum registro ou estado de todas as interações anteriores na aplicação são salvos e cada interação é tratada com base nas informações disponíveis para a interação.

Exemplo: Protocolos de Internet (IP), Protocolo de transferência de Hyper Texto (HTTP).

No exemplo do HTTP, cada requisição que é feita pelo navegador é de forma independente. Assim que o navegador fecha a conexão TCP, toda a informação é perdida. Mesmo que várias requisições sejam enviadas pela mesma conexão TCP, uma requisição não sabe da outra.

Para o servidor, cada requisição é uma requisição diferente. Não existe na requisição nenhuma informação que guarde estado.

Então, quando você abre um site e navega nele clicando em links e etc, o que acontece é esse processo de requisição/resposta o tempo todo.

Vantagens:

  • Redução do uso de memória no servidor.
  • Reduz problemas de sessão expirada.

Desvantagens:

  • Mais difícil de manter a interação do usuário.
  • Pode ser necessário incluir informação adicional em cada requisição, e esta informação adicional será necessária para ser interpretada pelo servidor.

Stateful

O programa tem uma memória (estado).

Já o Stateful mantém o controle do estado de interação da aplicação e permite que os dados possam ser mantido entre diferentes requisições.

Exemplo: Java — HttpSession, C# APS.net — Session, JavaScript — SessionStorage.

Imagine uma solicitação web onde você tem um navegador cliente para se comunicar a um processo do servidor.

Para manter o estado através do protocolo HTTP sem estado do navegador, ele enviará normalmente um identificador de sessão para o servidor em cada solicitação. Para cada pedido, o servidor vai ser como “ah, essa é sua sessão”.

Informações de estado pode então ser verificadas na memória do lado do servidor ou em um banco de dados com base nessa identificação da sessão.

Em um ambiente puramente sem estado não seria necessário o ID da sessão. Cada pedido deverá conter todas as informações que o servidor teria que processar. Mas muitas aplicações precisam manter o estado para manter o controle de haver ou não uma sessão autenticada para que o usuário possa visualizar determinados conteúdos, ou para acompanhar o que um usuário está fazendo.

Pois as vezes não é uma boa ideia enviar as credenciais do usuário para cada solicitação.

Vantagens:

  • Manter o controle de um usuário durante toda a execução da aplicação.
  • Mais intuitivo, dados de entidade podem ser mantidas no servidor entre requisições.
  • Pode melhorar o desempenho quando a recuperação de dados é necessária apenas uma vez.

Desvantagens:

  • Requer memória a ser alocada para armazenar os dados.
  • Podem levar a uma diminuição do desempenho se o armazenamento de sessão não é mantido de forma eficiente.

Statefull vs Stateless Components no React

Não use componentes com ou sem estado inconscientemente. Só porque você deseja usar o componente Stateful para o componente User, não significa que você deve fazer isso. Você tem que entender as razões por trás disso para tirar o máximo proveito.
Resumindo, os componentes Stateful têm estado, enquanto os Stateless não. Isso significa que os componentes Stateful armazenam todas as informações sobre o estado do componente e os componentes Stateless não têm memória, eles apenas imprimem os dados que você passa para eles.

Dê uma olhada no exemplo abaixo:

import React, { useState } from "react";// Stateful component
const Post = () => {
const [posts, setPosts] = useState([]);
return (
<PostList posts={posts} />
);
};
// Stateless component
const PostList = ({ posts }) => {

return (
<ul>
{posts.map(post => {
return <li>post</li>;
})}
</ul>
);
}

Dicas de leitura:

Por hoje é só pessoal, bons estudos e até próxima…

Deixem seus comentários para que possamos ter feedbacks e melhorar cada dia mais nosso conteúdo.

--

--