2008-08-14 16 views
6

Quelqu'un recommande-t-il un modèle de conception pour prendre un fichier de données binaires, en analyser certaines parties dans des objets et stocker les données résultantes dans une base de données?Modèle de conception pour analyser les données de fichier binaire et les stocker 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 que Une bonne conception inclurait un moyen de changer 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 Factory Pattern ferait partie de la conception globale de la partie Parser.

Répondre

21
  1. Il suffit d'écrire votre analyseur de fichiers, en utilisant toutes les techniques viennent à l'esprit
  2. Ecrire beaucoup de tests unitaires pour ce faire que tous vos cas de bord sont recouverts

Une fois que vous avez 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 flottantes dans votre tête, dont la plupart se révéleront erronées.

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

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

1

Le modèle de stratégie est peut-être celui que vous voulez regarder. La stratégie étant l'algorithme d'analyse de fichiers. Ensuite, vous voulez une stratégie distincte pour l'insertion de la base de données.

4

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

Pour les tâches plus complexes que j'utilise habituellement quelque chose comme un interpreter (ou un strategy) qui utilise une builder (ou factory) pour créer chaque partie des données.

Pour la diffusion de données, l'analyseur complet ressemblerait à un adapter, en s'adaptant d'un objet de flux à un flux d'objets (qui n'est généralement qu'une file d'attente). Pour votre exemple, il y aurait probablement un constructeur pour la structure de données complète (de la tête à EOF) qui utilise en interne des constructeurs pour les éléments de données internes (alimentés par l'interpréteur). Une fois l'EOF rencontré, un objet serait émis. Toutefois, les objets créés dans une instruction switch dans une fonction d'usine sont probablement la manière la 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 dans la gorge :)

1

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