Шаблон проектирования для анализа данных двоичного файла и хранения в базе данных

Кто-нибудь рекомендует шаблон проектирования для взятия файла двоичных данных, разбора его частей на объекты и сохранения результирующих данных в базе данных?

Я думаю, что подобный шаблон может быть использован для получения файла XML или файла с разделителями табуляции и анализа его в своих представительных объектах.

Общая структура данных будет включать:

(Заголовок) (DataElement1) (DataElement1SubData1) (DataElement1SubData2) (DataElement2) (DataElement2SubData1) (DataElement2SubData2) (EOF)

Я думаю, что хороший дизайн будет включать способ изменить определение синтаксического анализа на основе типа файла или некоторых определенных метаданных, включенных в заголовок. Таким образом, Factory Pattern будет частью общего дизайна для парсера.

14.08.2008 20:36:07
4 ОТВЕТА
РЕШЕНИЕ
  1. Просто напишите свой анализатор файлов, используя любые методы, которые придут вам на ум
  2. Напишите множество модульных тестов, чтобы убедиться, что все ваши крайние случаи покрыты

Как только вы это сделаете, у вас будет разумное представление о проблеме / решении.

Прямо сейчас у вас в голове витают теории, большинство из которых окажется ошибочными.

Шаг 3: Рефакторинг безжалостно. Ваша цель должна состоять в том, чтобы удалить около половины вашего кода

Вы обнаружите, что ваш код в конце будет либо напоминать существующий шаблон проектирования, либо вы создадите новый. Затем вы будете готовы ответить на этот вопрос :-)

21
14.08.2008 21:20:18

Возможно, вы захотите взглянуть на шаблон «Стратегия». Стратегия - алгоритм разбора файла.

Тогда вы хотите отдельную стратегию для вставки базы данных.

1
14.08.2008 20:37:15

Я полностью согласен с Орионом Эдвардсом, и обычно так я подхожу к проблеме; но в последнее время я начинаю видеть некоторые образцы (!) безумия.

Для более сложных задач я обычно использую что-то вроде интерпретатора (или стратегии ), который использует какой-то конструктор (или фабрику ) для создания каждой части данных.

Для потоковых данных весь анализатор будет выглядеть как адаптер , адаптирующийся от объекта потока к потоку объекта (который обычно является просто очередью).

Для вашего примера, вероятно, будет один компоновщик для полной структуры данных (от головы до EOF), который внутренне использует компоновщики для внутренних элементов данных (передаваемых интерпретатором). Как только EOF обнаружен, объект будет испущен.

Однако объекты, созданные в операторе switch в некоторой фабричной функции, являются, вероятно, самым простым способом для многих менее важных задач. Кроме того, мне нравится, когда мои объекты данных остаются неизменными, потому что вы никогда не знаете, когда кто-то подсунет вам параллелизм :)

4
24.08.2008 16:03:41

Используйте Лекса и YACC. Если вы не посвятите следующие десять лет исключительно этой теме, они будут создавать более качественный и быстрый код каждый раз.

1
26.09.2008 04:15:37