Python类层次结构和设计问题

时间:2013-03-11 22:45:10

标签: python oop class


我有一些python应用程序是聊天服务器。它有多个房间,一个客户可以连接到一个房间。所以我有班级和班级客户。客户端具有on_open(),on_message()和on_close()以及send()函数等事件。收到消息后,我需要将其发送到房间中的其他客户端并将其发布到我的消息队列中。这是我的问题。我不知道哪个班级做什么 是否应该在Room类或Client类中发布到队列?
我应该在哪里向客户类或客房类中的其他客户广播消息?
或者我应该将所有事件从Client class upper传递给Room class?

2 个答案:

答案 0 :(得分:1)

也许您应该让队列管理自己的问题并让它监听它需要记录的事件,而不是将其从属于其他任何类。

您可能想要了解观察者模式(http://code.activestate.com/recipes/131499-observer-pattern/http://philipuren.com/serendipity/index.php?/archives/4-guid.html)。它适用于许多不同类可能想要响应某些状态更改的情况(在您的示例中,传入消息)。在这种情况下,您的客户端类将是“主题” - 它将保留一个类似于on_open()的类的列表,并让他们知道发生了什么事情;观察者(在这种情况下,我建议队列)决定如何处理这些信息。这增强了未来的灵活性,因为如果要添加新功能(如创建桌面通知或在消息进入时播放声音),则无需更改现有类。

这个使用装饰器实现Observer的示例让您了解使用此策略可以获得多大的未来灵活性:http://reader1000.tumblr.com/post/20361533339/observer-pattern-with-python-decorators

答案 1 :(得分:0)

IMHO队列应该在房间内,因为每个客户端不负责队列,但为了让客户端看到消息,他们应该能够看到队列。