O artigo trata de como dados podem ser
armazenados temporariamente em aplicações ASP.NET que empreguem a tecnologia
Web Forms. A forma de tratar informações dá-se o nome de controle de estado
(são eles: Caching, Cookie, Session, ViewState etc). É útil em situações que envolvam a manipulação temporária de
informações. Esta é a principal justificativa para o uso dos recursos de
gerenciamento de estado. Existirão casos em que não será necessária a gravação
imediata de uma informação numa base relacional ou até mesmo, a própria
aplicação disponibilizará um conjunto de dados em memória para um acesso mais
rápido dos mesmos por parte de alguma funcionalidade. A exibição de
determinados tipos de informações após requisições sucessivas dentro de uma
mesma página, a obtenção de preferências de navegação/aparência selecionadas
anteriormente e dados temporários que devem permanecer ativos enquanto um
usuário estiver conectado (e não disparar uma possível ação) são outros bons motivos
para o uso dos dispositivos de controle de estado. Gerenciamento de
Estado em Web Forms - Armazenamento temporário de informações Nem sempre os dados
necessários para a execução de funcionalidades de uma página da Web serão
gravados de maneira permanente (em uma base de dados relacional, por exemplo).
A manipulação de informações em um projeto criado a partir da tecnologia Web
Forms envolverá, ao longo da execução de uma série de atividades, o acesso a um
conjunto de dados muitas vezes por um limitado intervalo de tempo. Além disso,
tais informações podem tanto ser de cunho geral, assim como restritas a
determinados usuários dado seu caráter confidencial. O processo de
armazenamento temporário de informações dentro de uma aplicação ASP.NET é
conhecido como controle de estado, sendo que em inúmeros casos este tipo de ação
estará relacionada à exibição de informações em controles visuais. O ASP.NET
disponibiliza diversos objetos para o gerenciamento de estado em sistemas
criados a partir da tecnologia Web Forms. Cabe aos desenvolvedores entender as
diferentes necessidades dentro de um projeto para, a partir de tal análise,
selecionar as alternativas mais adequadas a cada cenário.
Em que situação o tema é útil
Desde suas primeiras versões, a plataforma .NET possui um excelente suporte para a construção de sites dinâmicos: trata-se do ASP.NET, pois disponibiliza um conjunto extenso de recursos conhecido como Web Forms.
A tecnologia Web Forms foi desenvolvida utilizando como fundamento um conceito chamado de RAD (Rapid Application Development). Esta metodologia enfatiza a construção de interfaces gráficas que possam ser modeladas facilmente a partir de uma ferramenta gráfica (no caso, o Visual Studio). Além disto, controles visuais são empregados extensivamente, aliando-se a técnicas de orientação a objetos e programação orientada a eventos; tudo isto procura tornar mais ágil e flexível o processo de desenvolvimento de novas aplicações.
Páginas criadas em ASP.NET Web Forms podem se prestar às mais variadas finalidades, sendo que uma forma de uso bastante comum é a construção de funcionalidades do tipo CRUD (telas de cadastro/consulta). Embora a utilização de bancos de dados seja praticamente certa dentro de muitas aplicações, não será raro que determinadas informações sejam manipuladas em memória devido ao seu caráter provisório (e cuja confirmação poderá envolver ainda a persistência em uma base relacional posteriormente).
RAD é um modelo que
algumas tecnologias seguem para o desenvolvimento de aplicações rápidas. Utiliza
o famoso Drag-and-Drop (arrasta e solta), onde você basicamente possui uma
lista de componentes prontos e não tem a necessidade de construir a base de
código. Programação orientada a
eventos é um paradigma de programação. Diferente do procedural que seguem um
fluxo de controle padronizado, o controle de fluxo de programas orientados a
evento é guiado por indicações externas, chamadas eventos. O mesmo é muito
utilizado no desenvolvimento de interface com o usuário.
A manipulação temporária de informações é suportada pelo ASP.NET por meio do mecanismo de gerenciamento de estados. O mesmo oferece alternativas que tornam possível o armazenamento de objetos e outros tipos de dados, tanto do lado servidor, quanto no cliente (browser). A escolha de qual recurso é mais adequado depende de questões como, por quanto tempo uma informação estará acessível, quem poderá consumir a mesma, dentre outros aspectos.
Este artigo tem por finalidade apresentar alguns dos dispositivos que podem ser empregados no controle de estado dentro de aplicações Web Forms. Serão discutidos, assim, cenários em que variáveis de sessão ou aplicação, cookies, informações em cache e o mecanismo de ViewState podem ser considerados, apresentando ainda exemplos de uso de tais elementos.
CRUD (sigla do inglês
“Create, Retrieve, Update and Delete) é um termo que se refere a páginas Web
construídas com fins de inclusão (Create), consulta (Retrieve), atualização
(Update) e exclusão (Delete) de registros em uma base ou outro tipo de
repositório de dados.
Controle de Estado em Web Forms: uma visão geral
O ASP.NET permite que informações de estado sejam armazenadas de diferentes maneiras:
• Através de uma referência comum a toda a aplicação disponível, portanto, às diversas partes que constituem a mesma (objeto Application);
• Como parte do objeto que corresponde à sessão de um usuário ativo num determinado instante (propriedade Session de uma página criada em Web Forms);
• Dentro da página que está sendo utilizada por um usuário para a realização de uma sequência de operações (objeto ViewState);
• Em um dispositivo de armazenamento temporário, com o acesso aos dados sendo permitido apenas durante um intervalo específico de tempo e que, uma vez expirado, forçará a uma nova atualização das informações envolvidas (técnica conhecida como caching);
• Como um arquivo armazenado dentro de um diretório específico do browser utilizado para acesso a um site, sendo que tal meio apresenta geralmente um prazo de validade (tais mecanismos são conhecidos como cookies).
A escolha por qual tipo de recurso empregar no controle de estado dentro de um site construído em Web Forms, dependerá de diversos fatores. Pesarão neste caso questões como:
• Por quanto tempo um conjunto de dados deverá estar disponível para acesso;
• Em que locais da aplicação tais informações serão consumidas;
• Se os dados serão armazenados no servidor ou devido a outros fatores, do lado do cliente (valendo-se de mecanismos oferecidos pelo browser que o mesmo utiliza);
• A finalidade a que se prestarão as informações a serem manipuladas, se de cunho geral ou específicas a um determinado usuário.
Levando em conta o desenvolvimento de grandes aplicações, é comum que uma série de procedimentos sejam adotados com o intuito de assegurar que a performance permaneça dentro de níveis aceitáveis. Diversas técnicas são normalmente empregadas com o objetivo de minimizar a utilização de memória nos servidores em que tais soluções encontram-se hospedadas. Diante do exposto, sistemas com um grande número de acessos simultâneos precisarão ter cautela ao manipular informações de estado: o uso deste tipo de recurso sem maiores critérios pode afetar a performance, diminuindo assim a escalabilidade das aplicações consideradas.
A escalabilidade é uma
característica perseguida altamente desejável em aplicações informatizadas. Um
sistema é dito escalável quando possui a capacidade de se adequar a uma demanda
crescente no seu uso, sem que deixe de corresponder ao que se aguardava
inicialmente.
Variáveis de sessão e de aplicação possuem escopos diferentes. Enquanto nas primeiras, os dados armazenados serão específicos a cada sessão de usuário (e, portanto, acessíveis enquanto a sessão em questão ainda não tiver expirado), no caso das variáveis de aplicação as informações serão compartilhadas por todo o site (ou seja, serão comuns a todos os usuários acessando a solução num determinado momento). Carrinhos de compra (presentes em sites de e-commerce, por exemplo) são um exemplo clássico de uso de variáveis de sessão.
Uma página Web disponibiliza o acesso a uma sessão através de uma propriedade de nome Session (a qual aponta para uma referência do tipo HttpSessionState). Já a manipulação de valores associados à aplicação se faz utilizando a propriedade Application (que nada mais é do que um objeto gerado a partir da classe HttpApplicationState). Estes dois tipos (HttpSessionState e HttpApplicationState) funcionam como dicionários, sendo que essa estrutura funciona com uma chave (uma string de identificação) para acesso a um objeto qualquer.
...