[编辑]抱歉标题已关闭。我正在考虑我遇到的另一个问题,并且不小心越过了这两个问题。
大家好,我现在用Python编写我的IRC机器人骨架。
在我提出问题之前解释一些事情,我正在编写一个IRC机器人,配有一个可以接收信号的插件系统(即收到消息时,有人看到加入频道,... ),并调用插件中包含的这些函数,我将使用一个帮助方法,即如果我们看到一条消息,请调用sawMessage
。 sawMessage
将找到哪些插件要使用PluginManager
类等来处理消息。我已经考虑了整个系统。
我还为每个IRC操作设置了一个函数,即“doJoin”,“doPart”等,以便插件可以调用这些函数,而不会直接将插件连接暴露给插件。 - 这些功能是否应自动调用相应的sawMessage
,sawJoin
等?或者在调用sawMessage
后调用doMessage
是否应该由插件决定?我问的原因是因为如果doMessage
调用sawMessage
,而sawMessage
处理调用doMessage
的内容,它可能会在展开堆栈之前重复递归。
使插件负责调用sawMessage
以通知其他插件的缺点是插件可以选择不通知其他插件,并且如果插件DOES调用sawMessage
函数,递归问题可能会重新弹出。
我不知道如何解决这个问题。让doMessage
自动调用sawMessage
来通知其他插件似乎是一种好习惯,但如果插件设计不正确,总会有可能因递归而导致堆栈溢出(即不要回复它自己的消息),但是如果插件无论如何都要调用sawMessage
,那就是同样的问题。
对此有何看法?我知道这不是一个直截了当的问题/答案,但我无法决定如何处理这个问题。通常情况下,如果我只是为自己的用法编写一个小机器人,我不会关心可能的递归问题。但是,我写这篇文章是为了分发(我希望这是下一个巨大的机器人,就像其他所有IRC僵尸开发人员一样:D)我希望它能够正确地完成。
谢谢!
答案 0 :(得分:1)
听起来您需要在Publish/subscribe和Chain of Responsibility之间做出决定或阅读更多信息。不幸的是,我在这方面没有多少经验。刚碰巧最近阅读了相关的article。