将数据处理与 GUI 分开

Separating data handling from GUI

我正在开发一个具有图形用户界面的网络测试工具。我现在面临的问题是,我无法将基础数据与 GUI classes 分开。 该应用程序由一个 QMainWindow 组成,然后生成其他几个 QDialogs 并有一些 QWidgets。在这些 classes 中的每一个中,都有一些使用 QLineEditsQPushButtons 等的功能,并且数据存储在每个 class 中。现在,为了使用来自 MainWindow 中的 DeviceDiscovery 小部件的设备数据,我需要使用

deviceId = self.widget_deviceDiscovery.devices['devName'].id

而不是能够将其存储在整个 GUI 之外。但我怎么能做到这一点?将数据存储在 GUI classes.

中似乎是不对的

It just doesn't seem right to store the data in the GUI classes.

当然不是,但话又说回来,我不明白如何在 UI 中存储任何内容。数据存储在文件中。如果您的意思是您正在从视图对象中获取内容并在某些操作发生时应用它,那通常是可以的。

例如 - 您有一个 'login' 屏幕,其中包含两个可编辑的文本视图和一个按钮。单击代码中某处的按钮后,会有一个组件(通常类似于观察者)从文本视图中提取值并启动登录过程。这是您的标准 GUI 框架,这没关系,因为这些框架实际上在设计上是分开的,因为它们通常遵循 MVC/P 模式。数据和 BL 留给您处理,因为这些显然是特定于应用程序的。

这些框架的缺点是测试变得有些难以完成并且状态是从小部件中提取的。当应该支持不同的 UI 框架时,状态管理将按框架重写,这是一种开销。

有一个名为 Presentation Model 的模式,它将两个层完全分开(GUI 与 Presentation)并让您在不同的层处理这两个概念。大多数绑定框架都建立在这个概念之上。