Сведения о вопросе

Junior

03:47, 3rd August, 2020

Теги

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

Просмотров: 476   Ответов: 4

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

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

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

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

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



  Сведения об ответе

dump

02:17, 16th August, 2020

  1. Просто напишите свой файловый парсер, используя любые методы, которые приходят на ум
  2. Напишите много модульных тестов для него, чтобы убедиться, что все ваши крайние случаи покрыты

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

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

Шаг 3: оптимизация нещадно. Вашей целью должно быть удаление примерно половины кода

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


  Сведения об ответе

park

15:41, 26th August, 2020

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

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

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

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

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


  Сведения об ответе

prince

17:58, 23rd August, 2020

Возможно, вы хотите посмотреть на паттерн стратегии. Стратегия - это алгоритм синтаксического анализа файлов.

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


  Сведения об ответе

VCe znayu

08:19, 2nd August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться