当模型仅包含纯数据结构时,模型的实时UI更新会更改

时间:2009-09-15 10:05:37

标签: python design-patterns architecture

请就以下主题咨询我的意见:

我有一个模型 - 对象的结构。如:

  • 包含参与者的活动

  • 当前任务

  • 每项任务的受让人

模型将在服务器上进行腌制,并通过网络传输到客户端GUI应用程序。由于pickle我想要保持模型类尽可能简单(即只有简单的类只有数据字段,里面没有任何单个方法)。因此,我无法在模型对象上创建信号(例如OnUpdate)。

有时服务器会发送模型更新。例如“任务文本已更改”。应用更新后,我需要将其反映在UI中。在任务文本更改的情况下,应该更改UI中的标签。我只想更改相关控件,因此整个UI更新不是最佳解决方案。

另一方面,不想在搜索变化时遍历整个模型 - 这将太耗费资源。

那么,通知UI有关普通数据结构更改的最佳模式是什么?

2 个答案:

答案 0 :(得分:0)

您可能在错误概念下操作:泡菜不包括来自腌制类的代码。您可以向数据结构添加方法,但不会增加pickle的大小。

这是对咸菜的常见误解。它们不包含代码。

答案 1 :(得分:0)

您可以添加标记,例如self.isOnClientSide,并在每个更新处理程序中检查它,以便在任何一种情况下都可以使用不同的逻辑。

def onUpdateFoo(self):
  if self.isOnClientSide:
    return self.onUpdateFooOnClient()
  else:
    return self.onUpdateFooOnServer()

在取消腌制后立即相应地更改此标志。