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

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

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

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

(Заголовок) (ЭлементДанных1) (ЭлементДанных1SubData1) (ЭлементДанных1SubData2)(ЭлементДанных2) (ЭлементДанных2SubData1) (ЭлементДанных2SubData2) (EOF)

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

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

Возможно, вам стоит обратить внимание на паттерн «Стратегия».Стратегией является алгоритм синтаксического анализа файлов.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top