Padrões de desenvolvimento para lidar com importação / exportação de dados

5

Eu tenho um aplicativo baseado na web do asp.net que permite ao usuário final exportar dados para um formato de arquivo simples. (essencialmente fazendo um backup point-in-time do seu trabalho)

Em uma data posterior, eles podem reenviar (importar) esses dados de volta para o aplicativo da Web.

O formato atual do backup é bem trivial. Um gráfico de objeto é serializado usando o WCF DataContractSerializer para xml e, em seguida, o documento xml resultante é compactado. Importar, descompactar e desserializar os dados.

Há um pequeno problema que vejo com essa abordagem. versionamento ... à medida que o tempo passa e as estruturas de dados são alteradas (propriedades / coleções-filhos são adicionadas / removidas ou renomeadas), as versões dos dados de usuários exportadas anteriormente não serão mais mapeadas para o gráfico de objetos no aplicativo.

Existem padrões ou práticas específicas que abordam esse problema? ou qualquer outro material de leitura que você possa recomendar.

    
por Eoin Campbell 17.04.2012 / 15:34
fonte

2 respostas

2

Temos usado o .NET Xml Serialization de gráficos muito grandes de objetos .NET por vários anos. Optamos por adotar uma abordagem muito simples: manter os objetos compatíveis no nível do código. Geralmente, apenas adicionamos novas propriedades e, no caso em que modificamos o tipo de dados de uma propriedade, criamos uma nova propriedade com o tipo de dados modificado e a inicializamos a partir dos dados antigos quando o usuário fez o upgrade.

Acho que a melhor prática que instituímos foi que quaisquer novas propriedades fossem sempre adicionadas como uma propriedade completa, e não apenas uma variável de membro de classe. Isso nos permitiu garantir que o código sempre inicializasse a nova propriedade com um valor padrão útil (em vez do valor em branco / nulo ao qual ela inicializa durante a desserialização).

Isso nos cobriu por atualizações para o aplicativo ao longo de 5 anos, sem erros causados pela desserialização de versões antigas dos objetos em uma versão mais recente do aplicativo. (uma vez que adotamos a abordagem acima).

    
por 18.04.2012 / 15:28
fonte
0

Você já pensou em adicionar uma versão à sua exportação e fazer uma comparação de versão durante a importação?

Se as versões não corresponderem, você pode falhar a importação ou avisar o usuário que a importação provavelmente falhará, não vejo nenhuma outra maneira razoável de resolver isso.

    
por 22.04.2012 / 17:26
fonte