2009-09-15 87 views
2

請諮詢我,您對以下主題的意見:當模型包含明文數據結構時,實時更新模型更改

我有一個模型 - 對象的結構。如:

  • 事件,包含參與者

  • 當前任務

  • 在服務器上醃製的,並通過每個任務

該模型是怎麼回事的受讓人網絡到客戶端GUI應用程序。由於泡菜,我想保持模型類儘可能簡單(即只有簡單的類只有數據字段,裏面沒有任何單一的方法)。因此,我無法在模型對象上創建信號(如OnUpdate)。

有時服務器會發送模型更新。如「任務文本已更改」。當應用更新時,我需要將其反映在用戶界面中。在任務文本更改的情況下,它應該是UI中標籤的更改。我只希望改變相關的控件,所以整個UI更新不是最好的解決方案。

另一方面,不希望遍歷整個模型尋找變化 - 這將是太耗費資源。

那麼,通知UI有關普通數據結構變化的最佳模式是什麼?

+0

「信號」? 「的OnUpdate」?你在說什麼?數據庫觸發器?或者一些特定於Windows的功能? – 2009-09-15 10:49:01

+0

「這將是太耗費資源。」這是什麼意思?你有任何測量來支持它嗎?你在說什麼「資源」? – 2009-09-15 10:49:43

回答

0

你可能會在一個錯誤的概念下操作:醃菜不包括醃製類的代碼。您可以將方法添加到數據結構中,並且不會增加泡菜的大小。

這是一個常見的泡菜誤解。他們不包括代碼。

+0

謝謝你的回答! 但是,如果我將事件處理程序添加到服務器端的模型(即,該對象將包含有關事件偵聽器的數據),醃製該對象然後在客戶端將其取消,會發生什麼? – 2009-09-15 10:50:12

+0

@Slava Tutushkin:兩個地方都有類定義。只有可更改的屬性數據才被序列化。 – 2009-09-15 12:11:00

0

您可以添加一個標誌,例如self.isOnClientSide,並在每個更新處理程序中檢查它,以便在任何情況下都可以使用不同的邏輯。

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

在不酸洗後相應地更改此標誌。

相關問題