&引用;“本地”;发布订阅服务器模式以在MVC wxpython中使用
在MVC中使用wxpython,我寻找了一种让模型告诉控制器更改的方法。我找到了(py)pubsub,它实现了一种全局通知机制:消息被发送到一个地方(pubsub发布者),该发布者将消息发送给所有订阅者。每个订户检查消息是否有趣,并执行所需操作 从Smalltalk时代开始,我知道了一种更“局部”的方法:每个模型对象都保存一个感兴趣的控制器列表,并且只向这些控制器发送更改通知。没有涉及全球出版商。这可以作为模型类的一部分来实现,并且工作方式基本相同,只是它是模型和控制器的本地部分 现在是否有理由使用全局方法(在我看来,全局方法的性能要差得多,并且可能容易出现与全局方法相关的所有问题)?是否有另一个包实现本地观察者&引用;“本地”;发布订阅服务器模式以在MVC wxpython中使用,python,wxpython,observer-pattern,publish-subscribe,Python,Wxpython,Observer Pattern,Publish Subscribe,在MVC中使用wxpython,我寻找了一种让模型告诉控制器更改的方法。我找到了(py)pubsub,它实现了一种全局通知机制:消息被发送到一个地方(pubsub发布者),该发布者将消息发送给所有订阅者。每个订户检查消息是否有趣,并执行所需操作 从Smalltalk时代开始,我知道了一种更“局部”的方法:每个模型对象都保存一个感兴趣的控制器列表,并且只向这些控制器发送更改通知。没有涉及全球出版商。这可以作为模型类的一部分来实现,并且工作方式基本相同,只是它是模型和控制器的本地部分 现在是否有理由
谢谢 我看不出这里的细微差别。据我所知,pubsub是一个不错的选择。它包含在wx.lin.pubsub的wxPython中,也可以从下载。您可以将侦听器仅放在模型中,将发布器仅放在控制器中,或者按您的需要放置。以下是一些让您开始学习的链接:
@onAttr('attributeName')
def onModelAttributeName(self, attributeName)
@onNotify('Your message')
def onYourMessage(self):
@onNotifyKw('valid', 'value')
def onValidValueKw(self, valid, value)
当您绑定到处理程序赋予其属性的方法时,它会立即使用当前值调用处理程序,然后继续观察更改
发送消息
使用该方法
view/model.notify('Your message'):
view/model.notifyKw(valid=True, value='this)
控制器回调用
@onAttr('attributeName')
def onModelAttributeName(self, attributeName)
@onNotify('Your message')
def onYourMessage(self):
@onNotifyKw('valid', 'value')
def onValidValueKw(self, valid, value)
发送关键字
使用该方法
view/model.notify('Your message'):
view/model.notifyKw(valid=True, value='this)
控制器回调用
@onAttr('attributeName')
def onModelAttributeName(self, attributeName)
@onNotify('Your message')
def onYourMessage(self):
@onNotifyKw('valid', 'value')
def onValidValueKw(self, valid, value)
GUI对模型一无所知。您添加到GUI中的唯一东西是视图信号器,控制器将其自身附加到该信号器上,因此如果您不添加控制器,视图只会很高兴地向任何人发送消息
我已经在github上上传了到目前为止的内容
两者都有单元测试,它应该给出一个例子,说明它的功能,但我将创建一些wxpython示例
我使用的是python 2.7版,而Ysignals模块需要
用于穿线。
请看一看,我会对其他人对这种接近mvc的方式的看法感兴趣,或者指出一些我严重忽视的东西