【问题标题】:Design pattern for telegram bot电报机器人的设计模式
【发布时间】:2020-06-13 04:18:03
【问题描述】:

我目前正在开发一个电报机器人,它将具有许多功能并且将非常复杂。我目前完成了机器人的一项功能,代码已经无法管理。

例如,对话处理程序当前如下所示:

# BOT STATES
FIRST, SECOND, THIRD, FOURTH, FIFTH, SIXTH = range(6)
# Callback data
ONE, TWO, THREE, FOUR, CANCEL = range(5)


conv_handler = ConversationHandler(
    entry_points=[CommandHandler('start', self.start)],
    states={
        FIRST: [
            CallbackQueryHandler(
                self.one, pattern='^' + str(ONE) + '$'),
            CallbackQueryHandler(
                self.cancel, pattern='^' + str(CANCEL) + '$'),
        ],
        SECOND: [
            CallbackQueryHandler(
                self.two, pattern='^' + str(TWO) + '$'),
            # extra handler here
            CallbackQueryHandler(
                self.five, pattern='^' + str(THREE) + '$')
        ],
        THIRD: [
            MessageHandler(Filters.text, self.three)
        ],
        FIFTH: [
            MessageHandler(Filters.text, self.six)
        ],
        FOURTH: [
            MessageHandler(Filters.text, self.four)
        ],
        SIXTH: [
            MessageHandler(Filters.text, self.seven)
        ]

    },
    fallbacks=[CommandHandler('cancel', self.cancel)]
)

随着机器人变得越来越复杂,我必须继续为机器人添加更多回调数据和更多状态。

我还必须不断向同一个 .py 文件中添加更多函数来处理用作回调函数:

def six(self, update, context):
    update.message.reply_text("Enter name")
    return SIXTH

有没有更好的方法来管理我的代码?还是推荐的设计模式,我可以使用它来更轻松地管理我的项目?

【问题讨论】:

    标签: python design-patterns telegram telegram-bot python-telegram-bot


    【解决方案1】:

    设计模式是旨在用于解决已知问题的“配方”。 例如,如果您需要通知一个对象,当另一个对象发生变化时,您可以使用observer pattern

    在您的情况下,您可能需要对架构进行一些修改,尝试确定可以用设计模式抽象的点。

    例如,如果您处于收到大量事件的情况,并且您需要跟踪特定序列并对特定序列做出反应,那么可能值得考虑state patternstrategy pattern

    一般来说,这个想法是尝试识别已知模式,并尝试对您的软件进行建模,以便您可以陷入已知情况,这可以通过设计模式解决。

    【讨论】:

    • 所以我在寻找设计架构而不是设计模式?
    • 您正在寻找两者。有不同的设计层次。一个最重要的例子是 MVC 设计模式,这是一种架构模式,很难被概括。 OTOH,您需要对代码进行建模,以便它以这种方式运行。然后您将获得 MVC 所承诺的分离。
    • MVC 是一种设计模式。但是为了实现它,你需要确定你的案例中的模型是什么,谁是视图,谁是控制器。之所以有点抽象,是因为它取决于你的具体实现细节。 MVC 建立角色,并告诉你对象之间应该是什么关系,实现一种模式,但这种方式看它更面向架构。 en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
    • OTOH 设计模式有助于实现您的架构。希望这是有道理的:)
    • 例如,如果你要实现MVC,它会对架构产生影响,因为归根结底就是MVC的影响:定义一个松散耦合的架构。
    猜你喜欢
    • 2023-03-13
    • 2017-08-18
    • 2017-07-17
    • 2018-07-22
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    相关资源
    最近更新 更多