2013-03-27 75 views
0

在MVC中使用wxpython,我尋找一種讓模型告訴控制器變化的方法。我發現(py)pubsub,它實現了一個全局通知機制:消息被髮送到一個地方(pubsub Publisher),將它們發送給所有訂閱者。每個用戶都會檢查該消息是否有趣,並且確實需要什麼。我知道一個更「本地」的方法:每個模型對象保存一個感興趣的控制器列表,並只發送更改通知給這些控制器。沒有涉及全球發行商。這可以作爲Model類的一部分來實現,並且工作方式幾乎相同,除了它對模型和控制器是本地的。MVC中使用的「本地」發佈訂閱模式wxpython

現在是否有理由使用全局方法(這對我來說似乎性能低得多,並且可能傾向於與全局方法相關的所有問題)?是否有另一個實施本地觀察員的軟件包?

謝謝!

回答

0

我已經打了一段時間做MVC與wxPython的,我知道你的意思是訂閱協議是什麼全球。

我想出的最新想法是每個視圖和模型都有自己的觀察者。 觀察者對其處理程序的引用很弱,並且它們都在單獨的線程中工作,以便不阻止GUI。要回調GUI線程我正在使用wxAnyThread Gui方法裝飾器。

有3種類型的信號發送,因爲您可以設置哪些模型可以觀察哪些屬性,當它們被更改時它們會自動發出信號。那麼在模型和視圖上都可以發送消息信號或關鍵字信號。三種信號類型中的每一種都必須在每個視圖或模型中是唯一的,因爲它們被用來製作識別它們的元組。

模型屬性當您綁定到該處理器的屬性它馬上調用其當前值的處理程序,然後繼續觀察變化的方法

控制器處理程序以

@onAttr('attributeName') 
def onModelAttributeName(self, attributeName) 

裝飾。

發送消息

使用方法

view/model.notify('Your message'): 

控制器回調裝飾有

@onNotify('Your message') 
def onYourMessage(self): 

發送關鍵字

使用

view/model.notifyKw(valid=True, value='this) 

控制器回調裝飾有

@onNotifyKw('valid', 'value') 
def onValidValueKw(self, valid, value) 

的GUI留一無所知有關的模型,你添加到GUI的唯一事情就是認爲信號裝置的方法,控制器重視它自我這個,所以如果你不添加一個控制器,視圖會很高興地將消息發送給任何人。

我已經上傳了我迄今爲止在github

https://github.com/Yoriz/Y_Signal

https://github.com/Yoriz/Y_Mvc

兩個有單元測試應該給一點它做什麼的例子,但我將創建一些wxpython的例子。

我正在使用python版本2.7和Ysignals模塊要求 https://pypi.python.org/pypi/futures/2.1.3的線程。 請看看生病對某人認爲接近mvc的方式感興趣,或者指出我認真忽略的一些東西。