Python PureMVC vs Pubsub

bte*_*res 0 python model-view-controller puremvc publish-subscribe

我正在创建一个python应用程序,我想用MVC实现它.我打算用pubsub来完成这个,但我遇到了PureMVC.

任何人都可以向我解释这两件事,它们之间的区别以及使用这两件事的含义.

Oli*_*ver 5

我认为你指的是我非常了解的pypubsub(我是作者;).但是我对Python的PureMVC知之甚少.

基于PureMVC文档,这两者非常不同.基于浏览文档和听取演示文稿,我认为在选择时存在一些差异:

  • 学习曲线:
    • 在您的应用程序中加入pypubsub非常简单:决定"消息主题",订阅方法和功能,为这些主题添加发送消息.将消息传送到目的地是自动的.在"巡航速度" API是小:你pub.subscribepub.sendMessage学习,这就是它.
    • 使用PureMVC,您必须了解调解器,命令,代理等.这些都是具有重要功能的强大概念,您必须提前学习.在您从他们的目的"知识"到"理解"何时/如何使用它们之前,您甚至可能必须编写几个应用程序.对于一个应用程序,开销有时是值得的.如果您创建许多使用该框架的应用程序,则最有可能值得.
  • 对应用设计的影响:
    • PyPubsub:匿名观察者设计模式.
    • PureMVC:MVC架构模式.
    • 没有类可以与pypubsub"标准使用"一起使用.大多数情况下,您必须将您的消息分类为主题,并决定将哪些内容包含为数据.这可以相当有机地发展:您需要一个新的对话框,并且需要使其某些状态可用,因此在更改字段时,标签会在其他位置更改:您需要做的就是在对话框中包含发布,并在更新标签的代码.如果有的话,pypubsub让你不用担心设计; 或者更确切地说,它允许您将设计重点放在功能上,而不是如何将数据从一个地方转移到另一个地方.
    • 使用PureMVC可以使用许多类,它们要求您设计组件以从中派生并注册它们并实现基类功能.很明显,您可以轻松地从应用程序中的一个位置发布数据,并在不创建多个新类的情况下将其捕获到另一个位置并实现,以便在框架调用时它们将执行正确的操作.当然,在某些情况下,开销(设计时间)是值得的.
  • 可重用性:
    • 只要一个组件记录它发布的消息主题及其监听的内容,它就可以合并到另一个应用程序中,单元测试行为等.如果其他应用程序不使用pypubsub,则很容易添加,有对架构没有影响.并非所有应用程序都需要使用pubsub,它只能在需要时使用.
    • OTOH和PureMVC组件只能合并到已经基于PureMVC的应用程序中.
  • 可测性:
    • PureMVC通过跨层分离关注点来促进测试:视觉,逻辑,数据.
    • 而发布 - 订阅(pypubsub)通过将发布者与消费者分开来促进它,而不管层是什么.因此,使用pypubsub进行测试包括让组件使用测试发布数据,并订阅组件发布的数据.而对于PureMVC,测试必须假装是视觉和数据层.我不知道PureMVC有多容易.
    • 一旦应用程序达到一定的大小,每个发布 - 订阅系统在没有合适的工具的情况下很难调试:跟踪消息的路径可能很困难.Pypubsub提供有助于此(在开发期间使用)的类,以及验证发布者和侦听器是否兼容的功能.
    • 在我看来,基于PureMVC图表会出现类似的问题:您必须通过外观跟踪代理,命令和调解员的方式,以找出出错的原因.我不知道PureMVC提供了什么工具来处理这个问题.
  • 目的:
    • 观察者模式是关于如何通过某种"数据总线"从一个地方到另一个地方获取数据; 只要组件可以链接到总线,就可以在不知道源或接收器的情况下交换状态.
    • PureMVC是一种架构模式:它的工作是使您可以根据对视图,控件和数据的关注来轻松描述您的应用程序.该模型并不关心控件如何与之交互; 控件不关心它是如何显示的; 但是视图需要控件来提供特定服务来处理用户操作并获得所需的数据子集(因为通常不会显示所有可用数据),并且控件需要模型来提供特定服务(以获取数据,更改)它,验证它,保存它等),并且控件需要在适当的时间实例化视图组件.
  • 相互排斥:基于文档,我没有理由想到会阻止两个库在同一个应用程序中使用.他们在不同的层面上工作,他们有不同的目的,而不是共存.

所有的解耦策略都有利有弊,你必须权衡每一个.学习曲线,投资回报率,可重用性,性能,可测试性等.