Entwurfsmuster zum Parsen von Binärdateidaten und zum Speichern in einer Datenbank

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

  •  08-06-2019
  •  | 
  •  

Frage

Empfiehlt jemand ein Entwurfsmuster, um eine Binärdatendatei zu nehmen, Teile davon in Objekte zu analysieren und die resultierenden Daten in einer Datenbank zu speichern?

Ich denke, ein ähnliches Muster könnte verwendet werden, um eine XML- oder tabulatorgetrennte Datei in ihre repräsentativen Objekte zu analysieren.

Eine übliche Datenstruktur würde Folgendes umfassen:

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

Ich denke, ein gutes Design würde eine Möglichkeit beinhalten, die Parsing-Definition basierend auf dem Dateityp oder einigen definierten Metadaten im Header zu ändern.Also ein Fabrikmuster wäre Teil des Gesamtdesigns für den Parser-Teil.

War es hilfreich?

Lösung

  1. Schreiben Sie einfach Ihren Dateiparser und verwenden Sie dabei die Techniken, die Ihnen in den Sinn kommen
  2. Schreiben Sie viele Unit-Tests dafür, um sicherzustellen, dass alle Ihre Randfälle abgedeckt sind

Sobald Sie dies getan haben, haben Sie tatsächlich eine vernünftige Vorstellung vom Problem/der Lösung.

Im Moment schwirren Ihnen nur Theorien im Kopf herum, von denen sich die meisten als falsch herausstellen werden.

Schritt 3:Refaktorieren Sie gnadenlos.Ihr Ziel sollte es sein, etwa die Hälfte Ihres Codes zu löschen

Sie werden feststellen, dass Ihr Code am Ende entweder einem vorhandenen Entwurfsmuster ähnelt oder Sie ein neues erstellt haben.Dann sind Sie in der Lage, diese Frage zu beantworten :-)

Andere Tipps

Ich stimme Orion Edwards voll und ganz zu und gehe das Problem normalerweise so an.aber in letzter Zeit fange ich an, einige Muster(!) für den Wahnsinn zu erkennen.

Für komplexere Aufgaben verwende ich normalerweise so etwas wie ein Dolmetscher (oder ein Strategie), das einige verwendet Baumeister (oder Fabrik), um jeden Teil der Daten zu erstellen.

Für Streaming-Daten würde der gesamte Parser etwa wie ein aussehen Adapter, Anpassung von einem Stream-Objekt an einen Objekt-Stream (der normalerweise nur eine Warteschlange ist).

In Ihrem Beispiel gäbe es wahrscheinlich einen Builder für die gesamte Datenstruktur (vom Kopf bis zum EOF), der intern Builder für die internen Datenelemente verwendet (vom Interpreter gespeist).Sobald der EOF angetroffen wird, wird ein Objekt ausgegeben.

Allerdings ist das Erstellen von Objekten in einer Switch-Anweisung in einer Factory-Funktion wahrscheinlich der einfachste Weg für viele kleinere Aufgaben.Außerdem mag ich es, meine Datenobjekte unveränderlich zu halten, da man nie weiß, wann einem jemand die Parallelität aufdrängt :)

Das Strategiemuster ist vielleicht eines, das Sie sich ansehen möchten.Die Strategie ist der Datei-Parsing-Algorithmus.

Dann benötigen Sie eine separate Strategie für das Einfügen in die Datenbank.

Verwenden Lex und YACC.Wenn Sie die nächsten zehn Jahre nicht ausschließlich diesem Thema widmen, werden sie jedes Mal besseren und schnelleren Code produzieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top