Pequeno armazenamento de dados local simples para manter as configurações do usuário

StackOverflow https://stackoverflow.com/questions/4400192

  •  25-09-2019
  •  | 
  •  

Pergunta

Eu tenho esse pequeno aplicativo C# Winforms que não crescerá de forma alguma. São apenas dois campos de entrada e um botão.

Eu quero saber se vocês têm conhecimento de uma maneira de armazenar a valores que um usuário entra em um armazenamento de dados local. Você pode considerar 10 registros como muitos dados para esse cenário.

Requisitos

  1. Não deve exigir nenhuma configuração do lado do banco de dados. (criação de tabela, etc)

  2. Eu deveria ser capaz de apenas dar um objeto e ele deve armazená -lo, não quero perder tempo com isso.

  3. Os dados precisam ser facilmente recuperáveis.

  4. Quero poder reutilizar essa coisa para cada aplicativo pequeno que eu criar assim.

Minhas ideias

  1. Um objeto POCO que será serralizado XML e salvo na pasta de configurações locais. Após o carregamento do aplicativo, esse arquivo é desserializado de volta ao objeto POCO.

  2. Um OODBMS: Não tenho experiência com isso, mas sempre pensei que eles consistiam em uma única DLL, por isso seria fácil empacotá -los com o programa.

  3. Uma vez, há muito tempo, construí um aplicativo que armazenava as configurações do usuário dentro do registro. Não sei se isso ainda é apreciado.

Qual você acha que é a melhor abordagem?

As amostras de código são muito apreciadas!

Foi útil?

Solução

Levei em consideração as duas respostas e construí o seguinte:

public static class IsolatedStorageExtensions
{
    public static void SaveObject(this IsolatedStorage isoStorage, object obj, string fileName)
    {
        IsolatedStorageFileStream writeStream = new IsolatedStorageFileStream(fileName, FileMode.Create);
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(writeStream, obj);
        writeStream.Flush();
        writeStream.Close();
    }

    public static T LoadObject<T>(this IsolatedStorage isoStorage, string fileName)
    {
        IsolatedStorageFileStream readStream = new IsolatedStorageFileStream(fileName, FileMode.Open);
        BinaryFormatter formatter = new BinaryFormatter();
        T readData = (T)formatter.Deserialize(readStream);
        readStream.Flush();
        readStream.Close();

        return readData;
    }
}

Um objeto POCO Wrapper que contém esses dados a serem serializados:

[Serializable]
internal class DataStoreContainer
{
    public DataStoreContainer()
    {
        UserIDs = new List<int>();
    }

    public List<int> UserIDs { get; set; }
}

Para consumir estas extensões:

private IsolatedStorageFile _isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
private DataStoreContainer _data = new DataStoreContainer();
private const string FILENAME = "MyAppName.dat";

E em qualquer método em que você deseja obter os dados:

_data = _isoStore.LoadObject<DataStoreContainer>(FILENAME);

Para salvar os dados:

_isoStore.SaveObject(_data, FILENAME);

Outras dicas

Você já olhou Armazenamento isolado? Ele armazena dados em um arquivo local, específico para esse usuário (ou para o aplicativo, dependendo de como você especificar). Você pode facilmente serializar objetos para e da loja porque é baseado em fluxo. Parece a solução perfeita para o seu problema.

Como você afirma que 10 itens seriam muito, eu votaria no número 1 ou em uma variação do número 1, serializada binária ... você não parece indicar que ser capaz de ler os dados é importante e dados binários devem lhe dar menores Os tamanhos dos arquivos, embora se 10 for muito, isso ainda não deve ser importante.

Dito isto, eu gosto do que vi de DB4Objects.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top