0

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

谁能向我解释这两件事,它们之间的区别以及使用其中之一的含义。

4

1 回答 1

5

我想您指的是我非常了解的pypubsub(我是作者;)。但是我对 Python 的 PureMVC了解不多。

根据 PureMVC 文档,两者非常不同。根据浏览文档和收听演示文稿,我认为选择以下一些差异很重要:

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

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

于 2014-04-15T16:01:02.293 回答