2015-03-04 1 views
0

Я хочу найти шаблон на нескольких внешних сайтах и ​​хочу, чтобы общий интерфейс печатал один раз и собирал все результаты в одном представлении. Таким образом, я в настоящее время строю проект, который состоит из веб-сервера (для пользовательского интерфейса), который может отправлять запрос на другие веб-сайты.Архитектура плагинов Python: используйте полиморфизм или перехватчики импорта?

Я планирую использовать бутылки или КОЛБУ для быстрого основных функций веб-сервера и хотите принять плагин архитектуру.

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

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

Мой вопрос заключается в следующем: я должен использовать объектно-ориентированного программирования полиморфизм или имп модуль (load_source) использовать свои модули?

Каждый модуль может быть классом, созданным из общего класса модулей, или каждый модуль может быть независимым и содержит функции, используемые для ядра, называя их imp.load_source(). Второй вариант заставляет меня думать об экспорте DLL-функций, чтобы использовать их с программой C/C++.

Я читал this post, действительно интересно, мне все еще интересно в моем случае, лучше ли подкласс?

Благодарим вас за советы!

ответ

0

Ваша задача фактически состоит из 2-х частей:

  1. Найдите доступные плагины и загружать их источники.
  2. Инициализируйте (т. Е. Настройте) и используйте свои плагины.

Вопрос о «полиморфизме» относится к более позднему. Таким образом, вы можете использовать оба варианта: использовать imp.load_source, чтобы получить полиморфный подкласс, который может быть настроен до использования плагина позже.

Но я бы советовал для 1-й части, чтобы использовать «стандартный» механизм setuptools, потому что:

  • загрузки плагинов без конфликтов или недостающих требований,
  • даже если плагины сами имеют другие динамические зависимости (зачем ограничивать своих «программистов» ниже по потоку монолитными проектами?), И
  • и сохранение списка доступных плагинов обновленными как пакеты будут установлены и удалены из sys.path или плагин-Dir,

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

Если вы посмотрите на этот exemplary application, созданный для сравнения различных архитектур плагинов, вы заметите, что требуемый код почти меньше остальных, в то время как он выполняет гораздо больше.

Смежные вопросы