A melhor maneira de armazenar instâncias de classe para um arquivo / banco de dados

votos
2

Qual é a melhor maneira de armazenar instâncias de uma classe para o arquivo / banco de dados?

Nós temos uma classe base denominada Comando e cargas de classes derivadas. Os usuários criam instâncias dessas classes, adicionando comandos para um designer gráfico onde podem configurá-los. (Definir as propriedades).

Depois, temos uma maneira de armazenar estes comandos para um arquivo sem perder nenhuma informação.

Uma idéia era usar db4o, mas a licença GPL não é aceitável para este projeto.

Qualquer sugestão ou amostras de código?

Atualizar:

(A fim de de-blurryfie a minha pergunta: p)

O código gerado pode ser algo como:

    command[i++] = new DelayInSecondsCommand(2);
    command[i++] = new DaliRequestCommand(1, false, 254);
    command[i++] = new DaliRequestCommand(2, false, 254);
    command[i++] = new DaliRequestCommand(3, false, 254);
    command[i++] = new WaitInSecondsCommand(2);             
    command[i++] = new DaliRequestCommand(1, false, 0);
    command[i++] = new DaliRequestCommand(2, false, 0);
    command[i++] = new DaliRequestCommand(3, false, 0);
    command[i++] = new JumpCommand(0);

Mas, em seguida, com cargas de diferentes comandos.

Eu sei que é possível com .NET serialização, apesar I nunca usei isso antes, mas eu queria saber se existem melhores alternativas, como eu disse db4o parece bom, mas a licença não se encaixa no projeto.

Update 2:

Obrigado pelas respostas. Eu provavelmente vou ir com a solução de serialização agora, mas eu vou olhar para as outras opções também. FYI dados são armazenados em um banco de dados compacto SQL.

Publicado 10/12/2008 em 12:19
fonte usuário
Em outras línguas...                            


6 respostas

votos
4

Você está tentando salvar os dados em tabelas? ou como dados blob / clob? Desde que você menciona arquivos, eu assumo o último: qualquer um dos serializers padrão NET deve ser fino - eles todo o apoio herança etc. eu consideraria para DataContractSerializer, pois isso combina o apoio em nível de campo (como BinaryFormatter), e a montagem de independência de XmlSerializer.

Você também pode considerar as coisas mais esotéricos como protobuf-net .

Então: o que é que você precisa fazer isso não vai funcionar sob as serializers padrão?

Respondeu 10/12/2008 em 13:03
fonte usuário

votos
3

serialização faz o truque! Serialização é nada mais do que a conversão de um objecto ou de um gráfico conectado de objectos para uma corrente de bytes (de modo a persistirem no estado actual do objecto). Isso pode ser um fluxo binário, XML ou qualquer outra coisa. Você não tem que fazer esta conversão por seu próprio desde Net tem um grande suporte para serialização. Uma vez que você serializado um objeto, você está livre para armazenar esses dados para um arquivo ou banco de dados. Da mesma forma, uma corrente de bytes que representam um objecto em série pode ser desserializadas para um objecto que vai ter o mesmo estado que o original.

Btw: Uma vez que você tem um fluxo serializado de bytes, você pode aplicar mais algumas funções nele, por exemplo, compressão ou encriptação.

Respondeu 10/12/2008 em 12:52
fonte usuário

votos
3

DB40 também fornece uma licença comercial, mas foi recentemente comprada pela versant então talvez você pode querer olhar para isso. Este tipo de banco de dados é conhecido como objeto de banco de dados orientado e é uma maneira de criar instâncias persistentes de classes que é muito diferente de bancos de dados relacionais que trabalham usando tabelas.

Este (wikpedia.org) é uma boa leitura no banco de dados orientado a objetos orienated e esta (também wikipedia) é uma lista de algumas das opções disponíveis.

Na minha opinião objeto bases de dados são muito melhores e mais poderoso do que o relacional e eu só vai usar bancos de dados relacionais como o MySQL se eu realmente tenho que (não muito frequentemente).

Eu recommomend você assistir esses vídeos e baixar o julgamento.

Respondeu 10/12/2008 em 12:45
fonte usuário

votos
3

http://www.neodatis.org . Sua LGPL, mas o tempo que eu usei havia apenas uma implementação de Java. Agora, há uma versão "beta" para C #, mas eu não testado.

Respondeu 10/12/2008 em 12:42
fonte usuário

votos
2

Serialização é uma ótima maneira de armazenar esse tipo de dados. veja http://blog.paranoidferret.com/index.php/2008/06/20/csharp-tutorial-xml-serialization/

Respondeu 10/12/2008 em 12:59
fonte usuário

votos
2

Consideravelmente questão embaçada, por que você não apenas usar do .NET built-in possibilidades de serialização (por exemplo XmlSerializer).

Respondeu 10/12/2008 em 12:26
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more