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