Clique para classificar e enviar comentários
MSDN
Biblioteca MSDN
Artigos Técnicos
Visual Studio .NET
Visual Basic
 Visual Basic.NET

  Ativar exibição de largura de banda baixa
Visual Basic.NET

Armazenando Dados usando Armazenamento Isolado

Michael G. Emmons é um Arquiteto de Software e proprietário da Gargoyle Technologies (http://www.gargoyletech.com), uma empresa de comsultoria de Raleigh, NC, que fornece arquitetura, desenvolvimento, auxílio e trainamento em tecnologias .NET. Os artigos e whitepapers de Michael têm aparecido em diversas publicações e ele tem ensinado tecnologias de ponta em conferências de desenvolvimento e grupos de interesse especial em todo o país. Ele pode ser contactado em 919-362-7279 ou em memmons@gargoyletech.com.

Considere o seguinte cenário: Você se loga no seu computador e executa a sua aplicação financeira favorita. A aplicação determina as suas credenciais e a partir destas credenciais carrega as preferências do seu profile para a aplicação; as cores customizadas que você aplicou, seu layout de janela customizado, suas preferências de comportamentos tais como a verificação das modificações nos dados e mesmo a apresentação do formulário aberto na última vez que você usou a aplicação. Uma vez que você tenha terminado de usar a aplicação, você sai dela e dá logoff do seu computador. Agora, outro usuário do computador se loga e executa a mesma aplicação e ele tem as preferências do seu próprio profile, as quais são completamente deferentes das suas. Este é um cenário comum na maioria dos sistemas modernos. As aplicações hoje têm necessidade de armazenar dados "centrados-no-usuário" tais como preferências e estados das aplicações. Entretanto, se você é um desenvolvedor e já tentou implementar esta característica muiti-usuário você sabe que isso não é tão simples assim; determinar onde e como armazenar esses dados é de fato muito complicado. A menos que o nome e a localização dos arquivos de armazenamento sejam cuidadosamente escolhidos, esse dado pode tornar-se corrompido por outras aplicações que estejam tentando acessá-lo ou sobrescrevê-lo com os seus próprios dados. Para complicar ainda mais as coisas, e se você você tivesse uma suite de aplicações que compartilhassem preferêncais de perfis de usuários entre elas? E se você quisesse usar um perfil ambulante para que os seus usuários pudessem manter as mesmas preferências quando logados em qualquer local da rede?

Determinar um local seguro para o armazenamento de dados privados dos usuários tem sido problemático e propenso a erros. Mas o .NET oferece uma solução para este problema na forma de Armazenamento Isolado (Isolated Storage). Neste artigo eu examinarei o que é o armezenamento isolado, revisarei as classes que constróem o framework de armazenamento isolado e desenvolverei uma aplicação de exemplo em VB.NET que implementa o armezenamento isolado para guardar o estado da aplicação e as preferências do usuário.

O que é o Armazenamento Isolado?

O armazenamento isolado é a habilidade de isolar os dados da aplicação por credenciais únicas, tais como usuário, assembly e domínio de aplicação. Isto assegura que cada aplicação e cada usuário daquela aplicação terá um local único para armazenar os seus dados. A utilização do mecanismo de armazenamento isolado do .NET fornece um mecanismo de armazenamento consistente para todas as aplicações .NET e também poupa o desenvolvedor da dor de cabeça de desenvolver o seu próprio framework de armazenamento. Um benefício particularmente útil do mecanismo de armazenamento isolado é que ele desacopla a localização dos dados, o compartimento dos dados, do próprio dado, o armazenamento, permitindo que o desenvolvedor suporte armazenamento de dados muiti-usuário transparentemente.

Cenários de Uso

O armazenamento isolado é provavelmente mais comumente usado por aplicações Windows e Web para o armazenamento do estado da aplicação e das preferências dos usuários. Embora estes tipos de aplicação possam usar este mecanismo exatamente da mesma forma, ele é particularmente importante para aplicações Web pois elas não podem usar classes de I/O, assim, a maioria das outras opções de armazenamento não estão disponíveis. De forma similar, controles gerenciados (controles baixados) também não têm permissão de usar classes de I/O e assim devem contar com o armazenamento isolado para persistir os dados. O armezenamento isolado também é uma alternativa viável ao uso de um banco de dados para persistir configurações de usuários e dados da aplicação quando o número de usuários não é muito grande ou quando existe um overhead significativo com o acesso ao banco de dados.

Mesmo sendo útil o armazenamento isolado não é apropriado para ser usado em todos os cenários. Por exemplo, os dados dentro de um depósito isolado não está protegido de código altamente confiável, código não-gerenciado ou de usuários confiáveis. Isto o torna um mecanismo inadequado para o armazenamento de dados seguros ou valiosos.

Conceitos: Compartimentos e Depósitos de Dados

Eu mencionei que o armazenamento isolado usa compartimentos e depósitos de dados. De fato, estes são os dois únicos conceitos a serem lembrados quando estamos trabalhando com armazenamento isolado, assim, uma definição de cada um deles deve ser feita. Um compartimento de dados é uma abstração associada com algum aspécto único da identidade do código, tal como seu strong name, publisher, web site, etc. O compartimento de dados não é uma localização de armazenamento específica, mas sim um container para um ou mais depósitos.

Um depósito é um arquivo físico de armazenamento isolado que contém detalhes de implementação tais como a localização do diretório onde o dado existe. Ele expõe um sistema de arquivos virtual dentro do compartimento de dados. Antes de nós nos aprofundarmos no código e verificarmos as classes de armazenamento isolado, vamos dar uma olhada nos tipos de isolamento que podem ser desenvolvidos usando estas classes. Entender estes detalhes de projeto de antemão assegurará que nós implementemos a solução de armazenamento isolado apropriada para a nossa aplicação.

Sombras de Isolamento

Os dados da aplicações pode ser isolados em uma de duas formas: ou por usuário e assembly ou por usuário, assembly e domínio. Estes dois tipos de isolamento diferem somente em escopo e podem ser vistos na figura 1. O isolamento por usuário e assembly é apropriado quando múltiplas aplicações precisam acessar o mesmo depósito de dados. Por exemplo, se você desenvolve uma suite de aplicações onde todas usem as mesmas configurações de preferência ou informações de licenciamento. A única advertência quando utilizando este mecanismo de isolamento é que o código deve ser confiável a fim de transferir informações entre aplicações. O segundo mecanismo de isolamento, isolamento por usuário, domínio e assembly é apropriado para aplicações stand-alone que requerem um depósito de dados privado. Os dados somente podem ser acessados por código de um assembly específico. Além disso, o dado está disponível somente para a aplicação que estava executando quando o assembly criou o depósito e somente quando executado pelo usuário para quem o depósito foi criado. Este tipo de isolamento é apropriado para a maioria das situações.

Figura 1: Os diferentes tipos de armazenamentos isolados diferem somente em escopo.

Cc580656.vbnet_armazena_1(pt-br,MSDN.10).gif

Além disso, estes tipos de isolamento podem ser combinados com um perfil de usuário ambulante permitindo que um usuário leve suas preferências de aplicação e seus dados para qualquer computador em uma rede com roaming habilitado. Esta é uma característica realmente poderosa! Nos exemplos deste artigo eu não irei utilizar perfis ambulantes de usuário, mas eu irei prover alguma documentação de referência ao final do artigo que permitirá que você facilmente adicione essa funcionalidade ao seu código. Você deveria agora ter uma idéia bem clara do que o armazenamento isolado é e quando usá-lo, vamos (finalmente) dar uma olhada nas classes que implementam a funcionalidade do armazenamento isolado.

Classes de Armazenamento Isolado

Existem três classes que tratam com o armazenamento isolado: IsolatedStorageFile, IsolatedStorageFileStream e IsolatedStorageScope. O objeto IsolatedStorageFile representa um depósito único localizado no sistema de arquivos. O seu propósito é prover gerenciamento de assembly, arquivo e diretório. A IsolatedStorageFileStream provê acesso para os arquivos no depósito. Se você já usou qualquer uma das classes System.IO.FileStream, você estará familiarizado com a funcionalidade desta subclasse. E, já que a IsolatedStorageFileStream é uma subclasse de FileStream você pode usá-la transparentemente na marioria dos casos onde um FileStream é usado, tal como com um StreamReader ou StreamWriter. Finalmente, IsolatedStorageScope é uma enumeração que permite que você facilmente selecione e armazene o tipo de isolamento. A Figura 2 mostra um diagrama OMT com algumas das classes de armazenamento isolado e seus membros.

Figura 2: Algumas das classes de armazenamento isolado

Cc580656.vbnet_armazena_2(pt-br,MSDN.10).gif

Colocando as Classes para Funcionar

Na realidade, usar o framework de armazenamento isolado é direto. Primeiro você precisa obter um depósito. Como você faz isto depende do tipo de isolamento que você está usando. Se está isolando os seus depósitos por usuário e assembly você usaria o método estático IsolatedStorageFile.GetUserStoreForAssembly(). Se você está isolando os seus depósitos por usuário, assembly e domínio você usaria o método estático IsolatedStorageFile.GetUserStoreForDomain(). De forma alternativa, você poderia usar o método estático IsolatedStorageFile.GetStore() para executar uma destas tarefas passando uma combinação de bits da enumeração IsolatedStorageScope para especificar o escopo. Todos estes métodos retornam um objeto IsolatedStorageFile. Usando o objeto IsolatedStorageFile você lê, escreve e deleta arquivos e diretórios.

Vamos criar um exemplo em VB.NET que usa armazenamento isolado para guardar preferências do usuário. Esta aplicação Windows permitirá que os usuários selecionem as cores de frente e de fundo do formulário. Nós também daremos a eles um botão que os permita resetar suas cores para as o padrão do Windows. Quando o usuário sai da aplicação estas preferências serão salvas para um arquivo de armazenamento isolado. Na próxima vez que o usuário iniciar aplicação estas preferências serão carregadas do arquivo e aplicadas ao formulário. Se um usuário diferente se logar no sistema, as suas preferências serão salvas separadamente.

Listagem 1 mostra o código deste exemplo em uma captura de tela do exemplo executando com as mudanças feitas nas cores de frente e de fundo podem ser vistas na figura 2.

Figura 3: As preferências de cores do usuário serão salvas quando a aplicação for fechada.

Cc580656.vbnet_armazena_3(pt-br,MSDN.10).gif

O código relevante para este exemplo pode ser encontrado em LoadIsoStoragePrefs() e SaveIsoStoragePrefs(). O processo seguido nestes métodos é o mesmo que nós descrevemos na seção "Colocando as Classes para Funcionar". Primeiramente um depósito é recuperado usando-se o método estático IsolatedStorageFile.GetStore(). Depois, um array de todos os arquivos no depósito correspondentes a "Prefs.dat" é retornado. Se uma correspondência é encontrada nós criamos uma instância de StreamReader usando IsolatedStorageFileStream como entrada para o leitor. Finalmente, nós lemos os dados do arquivo, convertendo a string de dados em objetos de cor usando uma instância da classe ColorConverter e atribuindo as cores ao formulário.

O método SaveIsoStoragePrefs() é muito similar. Nós recuperamos um depósito, então criamos uma nova instância do StreamWriter usando IsolatedStorageFileStream como stream de entrada. Note que escrevendo um arquivo em modo FileMode.Create irá ou criar um novo arquivo se ele não existir ou sobrescrever o arquivo existente. Finalmente, mais uma vez usamos uma instância de ColorConverter para convertes as cores de frente e fundo de volta para string e escrevemos elas para o arquivo.

Conclusão

O Armazenamento Isolado desempenha um papel crítico em aplicações Windows e Web que precisem armazenar dados de usuário e estado de aplicações. A grande questão de usar o framework de armazenamento isolado no .NET é que o desenvolvedor precisa conhecer muito pouco sobre o que está acontecendo por trás dos panos; os objetos de armazenamento isolado cuidam da maior parte do trabalho. Por causa dessa arquitetura, a implementação de armazenamento isolado em uma aplicação torna-se pouco diferente de ler e escrever para arquivos normais.

O arquivo ZIP do projeto está disponível aqui.

Faça o download deste documento:

Armazenando Dados usando Armazenamento Isolado

downl.gif  formato Word, 71 Kb    

© 2009 Microsoft Corporation. Todos os direitos reservados. Termos de Uso  |  Marcas Comerciais  |  Política de Privacidade
Page view tracker