Вопрос

Я создаю приложение Python и хочу реализовать его с учетом MVC.Я собирался использовать для этого pubsub, но наткнулся на PureMVC.

Может ли кто-нибудь объяснить мне эти две вещи, различия между ними и последствия использования одного над другим.

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

Решение

Я предполагаю, что вы имеете в виду pypubsub о котором я знаю много (я автор ;).Однако я мало что знаю о PureMVC для Python.

Судя по документации PureMVC, они очень разные.Вот некоторые различия, которые, по моему мнению, будут иметь значение при выборе, исходя из просмотра документации и прослушивания презентации:

  • Кривая обучения:
    • Включить pypubsub в ваше приложение легко:определитесь с «темами сообщений», подпишитесь на методы и функции, добавьте сообщения для отправки по этим темам.Транспортировка сообщений к месту назначения происходит автоматически.API «крейсерской скорости» небольшой:у вас есть pub.subscribe и pub.sendMessage научиться и все.
    • с PureMVC вам нужно узнать о посредниках, командах, прокси и т. д.Все это мощные концепции со значительной функциональностью, которую вам придется изучить заранее.Возможно, вам даже придется написать пару приложений, прежде чем вы перейдете от «знания» их назначения к «пониманию», когда и как их использовать.Для одного приложения накладные расходы иногда окупаются.Скорее всего, оно того стоит, если вы создаете много приложений, использующих эту платформу.
  • Влияние на дизайн приложения:
    • ПиПабсуб:Шаблон проектирования анонимного наблюдателя.
    • ЧистыйМВК:Архитектурный шаблон MVC.
    • Нет классов, которые можно было бы использовать со «стандартным использованием» pypubsub.Чаще всего вам приходится классифицировать сообщения по темам и решать, что включать в качестве данных.Это может развиваться довольно органично:вам нужен новый диалог, и вам нужно сделать часть его состояния доступной, чтобы при изменении поля метка менялась где-то еще:все, что вам нужно сделать, это включить публикацию в диалоговое окно и подписку в код, который обновляет метку.Во всяком случае, pypubsub позволяет вам не беспокоиться о дизайне;или, скорее, это позволяет вам сосредоточиться на функциональности, а не на том, как переносить данные из одного места в другое.
    • В PureMVC можно использовать множество классов, они требуют, чтобы вы проектировали свои компоненты так, чтобы они были производными от них, регистрировали их и реализовывали функциональность базового класса.Неочевидно, что вы можете легко публиковать данные из одного места вашего приложения и захватывать их в другом, не создавая несколько новых классов и реализуя их так, чтобы они делали правильные вещи при вызове фреймворком.Конечно, в некоторых случаях накладные расходы (время на проектирование) окупаются.
  • Возможность повторного использования:
    • Пока компонент документирует, какие темы сообщений он публикует и что он прослушивает, его можно включить в другое приложение, протестировать его поведение и т. д.Если другое приложение не использует pypubsub, его легко добавить, это не повлияет на архитектуру.Не все приложения должны использовать pubsub, его можно использовать только там, где это необходимо.
    • OTOH компонент PureMVC можно включить только в приложение, которое уже основано на PureMVC.
  • Тестируемость:
    • PureMVC упрощает тестирование, разделяя задачи по уровням:визуальные эффекты, логика, данные.
    • В то время как публикация-подписка (pypubsub) облегчает это, разделяя издателей и потребителей, независимо от уровня.Следовательно, тестирование с помощью pypubsub заключается в том, чтобы тест публиковал данные, используемые вашим компонентом, и подписывался на данные, опубликованные вашим компонентом.Тогда как в случае с PureMVC тесту придется притворяться визуальным слоем и слоем данных.Я не знаю, насколько это просто в PureMVC.
    • Любую систему публикации-подписки может стать трудной для отладки без подходящих инструментов, как только приложение достигнет определенного размера:может быть сложно отследить путь сообщений.Pypubsub предоставляет классы, которые помогают в этом (которые будут использоваться во время разработки), а также функциональные возможности, проверяющие совместимость издателей и прослушивателей.
    • Мне кажется, что на основе диаграмм PureMVC возникнут аналогичные проблемы:вам придется проследить свой путь через прокси, команды и посредники через фасады, чтобы выяснить, почему что-то пошло не так.Я не знаю, какие инструменты PureMVC предоставляет для решения этой проблемы.
  • Цель:
    • Шаблон наблюдателя описывает, как переносить данные из одного места в другое через своего рода «шину данных»;пока компоненты могут подключаться к шине, обмен состоянием может осуществляться без знания источника или приемника.
    • PureMVC — это архитектурный шаблон:его задача — облегчить описание вашего приложения с точки зрения представления, управления и данных.Модель не заботится о том, как с ней взаимодействует элемент управления;элементу управления не важно, как он отображается;но представлению нужен элемент управления для предоставления конкретных сервисов для обработки действий пользователя и получения желаемого подмножества данных для отображения (поскольку обычно не все доступные данные отображаются), а элементу управления нужна модель для предоставления конкретных сервисов (для получения данных, изменения его, проверить, сохранить и т. д.), а элементу управления необходимо создать экземпляры компонентов представления в нужное время.
  • Взаимное исключение:Основываясь на документации, я не могу придумать никакой причины, которая препятствовала бы использованию двух библиотек в одном приложении.Они работают на разных уровнях, имеют разное предназначение, поэтому могут сосуществовать.

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

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