Modello di progettazione per l'analisi dei dati di file binari e l'archiviazione in un database

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

  •  08-06-2019
  •  | 
  •  

Domanda

Qualcuno consiglia un modello di progettazione per prendere un file di dati binario, analizzarne parti in oggetti e archiviare i dati risultanti in un database?

Penso che un modello simile potrebbe essere utilizzato per prendere un file XML o delimitato da tabulazioni e analizzarlo nei suoi oggetti rappresentativi.

Una struttura dati comune includerebbe:

(Intestazione) (DataElement1) (DataElement1SubData1) (DataElement1SubData2)(DataElement2) (DataElement2SubData1) (DataElement2SubData2) (EOF)

Penso che una buona progettazione includa un modo per modificare la definizione di analisi in base al tipo di file o ad alcuni metadati definiti inclusi nell'intestazione.Quindi a Modello di fabbrica farebbe parte del progetto generale per la parte Parser.

È stato utile?

Soluzione

  1. Scrivi semplicemente il tuo parser di file, usando qualunque tecnica ti venga in mente
  2. Scrivi molti test unitari per assicurarti che tutti i casi limite siano coperti

Una volta fatto questo, avrai effettivamente un'idea ragionevole del problema/soluzione.

In questo momento hai solo teorie che ti girano per la testa, la maggior parte delle quali si riveleranno fuorvianti.

Passaggio 3:Refactoring senza pietà.Il tuo obiettivo dovrebbe essere quello di eliminare circa la metà del tuo codice

Scoprirai che il tuo codice alla fine assomiglierà a un modello di progettazione esistente o ne avrai creato uno nuovo.Sarai quindi qualificato per rispondere a questa domanda :-)

Altri suggerimenti

Sono pienamente d'accordo con Orion Edwards, e di solito è il modo in cui affronto il problema;ma ultimamente ho iniziato a vedere alcuni schemi (!) per la follia.

Per compiti più complessi di solito utilizzo qualcosa come an interprete (o a strategia) che ne utilizza alcuni costruttore (O fabbrica) per creare ogni parte dei dati.

Per i dati in streaming, l'intero parser assomiglierebbe a un file adattatore, adattandosi da un oggetto flusso a un flusso di oggetti (che di solito è solo una coda).

Per il tuo esempio ci sarebbe probabilmente un costruttore per la struttura dati completa (dalla testa a EOF) che utilizza internamente i costruttori per gli elementi dati interni (alimentati dall'interprete).Una volta incontrato l'EOF, verrebbe emesso un oggetto.

Tuttavia, gli oggetti creati in un'istruzione switch in alcune funzioni di fabbrica sono probabilmente il modo più semplice per molte attività minori.Inoltre, mi piace mantenere immutabili i miei oggetti dati perché non sai mai quando qualcuno ti infila la concorrenza in gola :)

Il modello di strategia è forse quello che vuoi guardare.La strategia è l'algoritmo di analisi dei file.

Allora vuoi una strategia separata per l'inserimento nel database.

Utilizzo Lex e YACC.A meno che non dedichiate i prossimi dieci anni esclusivamente a questo argomento, produrranno ogni volta un codice migliore e più veloce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top