2008-08-14 10 views
6

¿Alguien recomienda un patrón de diseño para tomar un archivo de datos binarios, analizar partes de él en objetos y almacenar los datos resultantes en una base de datos?Patrón de diseño para analizar datos de archivos binarios y almacenarlos en una base de datos

Creo que se podría utilizar un patrón similar para tomar un archivo XML o delimitado por tabuladores y analizarlo en sus objetos representativos.

Una estructura de datos común incluiría:

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

creo una un buen diseño incluiría una forma de cambiar la definición de análisis basada en el tipo de archivo o algunos metadatos definidos incluidos en el encabezado. Entonces, un Factory Pattern sería parte del diseño general de la parte Parser.

Respuesta

21
  1. Sólo tiene que escribir su analizador de archivos, utilizando cualquier técnica que vienen a la mente
  2. Escribir un montón de pruebas de unidad para que haga que todas sus casos extremos están cubiertos

Una vez hecho esto, en realidad tendrá una idea razonable del problema/solución.

Ahora mismo tienes teorías flotando en tu cabeza, la mayoría de las cuales resultarán equivocadas.

Paso 3: refactorizar sin piedad. Su objetivo debe ser eliminar aproximadamente la mitad de su código

Encontrará que su código al final se parecerá a un patrón de diseño existente o habrá creado uno nuevo. A continuación, estará calificado para responder esta pregunta :-)

1

El patrón de estrategia es tal vez uno que desee ver. La estrategia es el algoritmo de análisis de archivos.

Luego desea una estrategia separada para la inserción de la base de datos.

4

Estoy completamente de acuerdo con Orion Edwards, y por lo general es la forma en que abordo el problema; pero últimamente he empezado a ver algunos patrones (!) a la locura.

Para tareas más complejas que suelo usar algo como un interpreter (o una strategy) que utiliza algunos builder (o factory) para crear cada parte de los datos.

Para la transmisión de datos, todo el analizador se parecería a un adapter, adaptándose de un objeto continuo a un flujo de objeto (que generalmente es solo una cola).

Para su ejemplo, probablemente haya un generador para la estructura de datos completa (de la cabeza a EOF) que internamente utiliza constructores para los elementos de datos internos (alimentados por el intérprete). Una vez que se encuentre el EOF, se emitirá un objeto.

Sin embargo, los objetos creados en una instrucción switch en alguna función de fábrica es probablemente la forma más simple para muchas tareas menores.Además, me gusta mantener mis objetos de datos inmutables ya que nunca se sabe cuando alguien le tira la concurrencia al cuello :)

1

Use Lex y YACC. A menos que dedique los siguientes diez años exclusivamente a este tema, producirán un código mejor y más rápido cada vez.

Cuestiones relacionadas