Padrão de design para analisar dados de arquivos binários e armazená-los em um banco de dados

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

  •  08-06-2019
  •  | 
  •  

Pergunta

Alguém recomenda um padrão de design para pegar um arquivo de dados binários, analisar partes dele em objetos e armazenar os dados resultantes em um banco de dados?

Acho que um padrão semelhante poderia ser usado para pegar um arquivo XML ou delimitado por tabulação e analisá-lo em seus objetos representativos.

Uma estrutura de dados comum incluiria:

(Cabeçalho) (DataElement1) (DataElement1SubData1) (DataElement1SubData2)(DataElement2) (DataElement2SubData1) (DataElement2SubData2) (EOF)

Acho que um bom design incluiria uma maneira de alterar a definição de análise com base no tipo de arquivo ou em alguns metadados definidos incluídos no cabeçalho.Então um Padrão de fábrica faria parte do design geral da parte do Analisador.

Foi útil?

Solução

  1. Basta escrever o seu analisador de arquivo, usando quaisquer técnicas vêm à mente
  2. Escrever lotes de testes de unidade para ele para se certificar de todos os seus casos de ponta são cobertos

Uma vez feito isso, você vai realmente ter uma idéia razoável do problema / solução.

Agora você só tem teorias flutuando em sua cabeça, a maioria dos quais vai passar a ser mal orientado.

Passo 3: Refactor impiedosamente. Seu objetivo deve ser o de eliminar cerca de metade do seu código

Você verá que o seu código no final vai ou se assemelham a um padrão de projeto existente, ou você terá criado um novo. Você vai então ser qualificado para responder a esta pergunta: -)

Outras dicas

Concordo plenamente com Orion Edwards, e geralmente é a maneira que eu abordar o problema; mas ultimamente tenho sido começando a ver alguns padrões (!) para a loucura.

Para tarefas mais complexas eu costumo usar algo como um intérprete (ou um estratégia ) que usa alguns construtor (ou fábrica ) para criar cada parte dos dados.

Para streaming de dados, todo o analisador seria algo parecido com um adaptador , adaptando a partir de um corrente de objectos para uma corrente de objectos (que normalmente é apenas uma fila).

Para o seu exemplo provavelmente haveria um construtor para a estrutura de dados completo (da cabeça aos EOF) que usa internamente construtores para os elementos de dados internos (alimentados pelo intérprete). Uma vez que o EOF for encontrado um objeto seria emitida.

No entanto, os objetos criados em uma instrução switch em alguma função fábrica é provavelmente a maneira mais simples para muitas tarefas menores. Além disso, eu gosto de manter meus dados em objetos imutáveis ??como você nunca sabe quando alguém empurra a concorrência para baixo sua garganta:)

O padrão Strategy é talvez aquele que você quer olhar. A estratégia de ser o algoritmo de arquivo de análise.

Em seguida, você quer uma estratégia separada para inserção de banco de dados.

Use Lex e YACC. A menos que você dedicar os próximos anos dez exclusivamente a este assunto, eles vão produzir melhor e mais rápido de código de cada vez.

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