Pythonic способ идентифицировать тайный файл, а затем вызвать для него синтаксический анализатор?Создание класса Q - PullRequest
2 голосов
/ 16 августа 2011

(примечание) Буду признателен за помощь в обобщении названия. Я уверен, что это класс проблем в ОО-земле, и, вероятно, он имеет разумный характер, я просто не знаю лучшего способа его описать.

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

Есть несколько возможных типов данных, которые мы могли бы получать, и несколько версий представления данных, которые мы могли бы получать, например. «Тип отчета A, версия 1.2» против «Тип отчета A, версия 2.0»

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

Со временем мы обязательно добавим типы и версии.

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

Вариант 1

  • Напишите скрипт монолитного идентификатора, который определяет тип, а затем импортирует и вызывает правильно названные функции класса.
  • Преимущества

    • Вероятно, довольно легко отлаживать,
    • Только один файл, который выполняет анализ.
  • Недостатки

    • Кажется, взломать.
    • Было бы неплохо не создавать знание форматов данных в двух местах, один раз для идентификатора, один раз для фактического слияния.

Вариант 2

  • Написать функцию «ID» для каждого класса; возвращает Да / Нет / Может быть, когда задан идентифицирующий текст.
  • скрипт ID теперь импортирует группу классов, создает их экземпляры в тексте и спрашивает, совпадают ли текст и тип класса.
  • расквитаться:
    • чище в том, что все живет в одном модуле?
  • Downsides:
    • Медленнее? Зависит от логики прохождения классов.

Говоря абстрактно, должен ли Python создавать группу классов и использовать функцию ID, или Python должен создавать один (или несколько) классов ID, имеющих класс парных элементов, или каким-либо другим способом?

1 Ответ

2 голосов
/ 16 августа 2011

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

The structure of the strategy pattern.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...