Modèle de conception pour analyser les données de fichiers binaires et les stocker dans une base de données

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

  •  08-06-2019
  •  | 
  •  

Question

Quelqu'un recommande-t-il un modèle de conception pour prendre un fichier de données binaires, en analyser des parties en objets et stocker les données résultantes dans une base de données ?

Je pense qu'un modèle similaire pourrait être utilisé pour prendre un fichier XML ou délimité par des tabulations et l'analyser dans leurs objets représentatifs.

Une structure de données commune comprendrait :

(En-tête) (DataElement1) (DataElement1SubData1) (DataElement1SubData2)(DataElement2) (DataElement2SubData1) (DataElement2SubData2) (EOF)

Je pense qu'une bonne conception inclurait un moyen de modifier la définition d'analyse en fonction du type de fichier ou de certaines métadonnées définies incluses dans l'en-tête.Donc un Modèle d'usine ferait partie de la conception globale de la partie Parser.

Était-ce utile?

La solution

  1. Écrivez simplement votre analyseur de fichiers, en utilisant toutes les techniques qui vous viennent à l'esprit
  2. Écrivez de nombreux tests unitaires pour vous assurer que tous vos cas extrêmes sont couverts

Une fois que vous aurez fait cela, vous aurez réellement une idée raisonnable du problème/de la solution.

À l’heure actuelle, vous n’avez que des théories qui flottent dans votre tête, dont la plupart s’avéreront erronées.

Étape 3:Refactorisez sans pitié.Votre objectif devrait être de supprimer environ la moitié de votre code

Vous constaterez que votre code à la fin ressemblera à un modèle de conception existant ou que vous en aurez créé un nouveau.Vous serez alors qualifié pour répondre à cette question :-)

Autres conseils

Je suis entièrement d'accord avec Orion Edwards, et c'est généralement la façon dont j'aborde le problème ;mais dernièrement, j'ai commencé à voir des tendances (!) à la folie.

Pour les tâches plus complexes, j'utilise généralement quelque chose comme un interprète (ou un stratégie) qui utilise certains constructeur (ou usine) pour créer chaque partie des données.

Pour le streaming de données, l'ensemble de l'analyseur ressemblerait à un adaptateur, s'adaptant d'un objet flux à un flux d'objets (qui n'est généralement qu'une file d'attente).

Pour votre exemple, il y aurait probablement un générateur pour la structure de données complète (de la tête à EOF) qui utilise en interne des générateurs pour les éléments de données internes (alimentés par l'interpréteur).Une fois l’EOF rencontré, un objet serait émis.

Cependant, les objets créés dans une instruction switch dans certaines fonctions d'usine constituent probablement le moyen le plus simple pour de nombreuses tâches de moindre importance.De plus, j'aime garder mes objets de données immuables, car on ne sait jamais quand quelqu'un vous pousse la concurrence dans la gorge :)

Le modèle de stratégie est peut-être celui que vous souhaitez examiner.La stratégie étant l'algorithme d'analyse des fichiers.

Ensuite, vous souhaitez une stratégie distincte pour l'insertion de base de données.

Utiliser Lex et YACC.À moins que vous ne consacriez les dix prochaines années exclusivement à ce sujet, ils produiront à chaque fois un code meilleur et plus rapide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top