Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python——程序设计的健全性检查_Python_Design Patterns_Publish Subscribe - Fatal编程技术网

Python——程序设计的健全性检查

Python——程序设计的健全性检查,python,design-patterns,publish-subscribe,Python,Design Patterns,Publish Subscribe,我有一个项目,我是这样安排的: User Interface Interface Handler Main Network Handler Networks Elements Handler Elements 界面是gui,主要是显而易见的,网络是元素的包装器并定义它们的交互,元素是最小的组件。这是一个家庭安全/自动化程序,元素包括ZWave传感器、android手机、灯光、电视等,网络将它们封装在逻辑组中,如ZWave或灯光或android手机电台,与IP网络摄像头一起使用,通过声音线将声音

我有一个项目,我是这样安排的:

User
Interface
Interface Handler
Main
Network Handler
Networks
Elements Handler
Elements
界面是gui,主要是显而易见的,网络是元素的包装器并定义它们的交互,元素是最小的组件。这是一个家庭安全/自动化程序,元素包括ZWave传感器、android手机、灯光、电视等,网络将它们封装在逻辑组中,如ZWave或灯光或android手机电台,与IP网络摄像头一起使用,通过声音线将声音传送给它们,等等

问题是,深入到项目中,它会变得一团糟。我一直在使用这样的想法,即下面的层不能知道上面的层,但是上面的层可以知道下面的1层,除了接口之外,它什么都不知道,只能通过pubsub与上面的层通信,并且只使用可能感兴趣的抽象消息。接下来,我只使用对象方法调用、对象属性更改等。我是否正确处理了这些问题?一旦我开始实施复杂的交互,例如传感器跳闸和远离警报激活时,就会发生一系列事情:灯都亮了,监视器切换到运动检测记录,发送带有快照图片的电子邮件,等等。这些交互会让人困惑,我已经转向紧密耦合的事情。当我尝试松散地结合时,我最终基本上会创造出新的语言,这样所有的语言都能说相同的语言


一个核心问题是我有着完全不同的元素。ZWave通过OpenZWave说话,android站通过Zoneminder和/或soundwire说话,lights通过http说话,等等。我的方法正确吗?是否有一个更好的通用设计模式,我应该建模?谢谢。

您可能需要选择一种消息传递协议,例如,所有元素都可以通过该协议进行通信。这样,每个元素都可以订阅MQTT会话,并在发布与其相关的消息时适当地执行操作

例如,每个设备在状态/主题状态/客厅/窗口1-OK发生变化时,都可以传递其状态。然后,系统的其他部分可以订阅状态主题,并在某些情况发生变化时做出相应的反应,例如状态/客厅/窗户1-报警或类似的情况

您还可以为设备设置一个主题,用于向不使用相同语言的其他设备发出命令。例如,用户从网页输入关闭灯的命令/主题可能会发布命令/客厅/light1-off,控制灯的Zwave模块可以监听并对消息进行操作

查看MQTT消息日志是准确了解系统中发生了什么的好方法,因为这是设备之间报告状态并相互交互的对话


MQTT在几乎所有平台上都得到了很好的支持。有Python、Arduino、PHP、JavaScript、Node.js、C/C++、Java等的客户端。

我认为这篇文章更适合;事实上,它对这个网站来说太宽了。