我正在创建一个python应用程序,我想在考虑MVC的情况下实现它。我打算使用pubsub来完成这项工作,但我遇到了PureMVC。

任何人都可以向我解释这两件事,它们之间的差异以及使用一个而不是另一个的含义。

有帮助吗?

解决方案

我想你指的是 pypubsub 我知道很多(我是作者;)。但是我不太了解 Python的PureMVC.

两者非常不同,基于PureMVC文档。以下是我认为在浏览文档和听取演示文稿的基础上选择的一些差异:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top