编程语言
首页 > 编程语言> > 写出这10 行 Python代码后,我得到了无与伦比的优越感

写出这10 行 Python代码后,我得到了无与伦比的优越感

作者:互联网

就这 10 行代码能干啥?

为了表明我不是标题党,我得先亮出这 10 行代码:

class Event:
    handlers = dict()

    def attach(self, handler_id, handler):
        if not callable(handler):
            raise TypeError('handler object is not callable')
        self.handlers.update({handler_id: handler})

    def notify(self):
        return [handle_func() for _, handle_func in self.handlers.items()]

有的童鞋可能笑了,就这 10 行代码,连个类实例和方法调用都没有,能干嘛?首先,你要知道我为了这 10 行代码,我把所有注释都删了,其次,你是对的,所以请看下面的代码(阴险.jpg):

def update_cache(**kwargs):
    print('<update_cache>')

def send_notification(**kwargs):
    print('<send_notification>')

if __name__ == '__main__':
    order_completed_event = Event()
    order_completed_event.attach(handler_id='update_cache', handler=update_cache)
    order_completed_event.attach(handler_id='send_notification', handler=send_notification)
    order_completed_event.notify()

这玩意儿是啥?

有的童鞋可能看出来了,这是一个简易的事件组件(不同编程语言、框架叫法不一样),也可以说是观察者模式的一种简单实现。

观察者模式是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实时事件处理系统。——维基百科

要怎么用?

简单解读一下上面的示例代码:

示例代码中的业务逻辑,是我抽象的一个大家都比较容易理解的业务场景,当一个订单完成后,一般除了订单本身的主流程之外,多多少少都需要执行一些和订单主流程关系不大的逻辑,例如顺便更新点什么东西或是通知一下买家/卖家,这么说,现在只需要在订单完成的时候,调用一下 订单完成事件notify 方法,就可以完成相关的逻辑了。

为什么要用?

在很多项目中(起码我见过的),大多都会把上述提到的跟订单主流程关系不大的逻辑写在订单主流程后,或是把业务服务放在那儿进行调用,而这么做,代码会越来越臃肿,维护起来也不方便,有强迫症的人看着也不舒服,这一切都是因为逻辑的耦合导致的,而我们可以用上面的事件组件进行优化,达到逻辑的解耦,让程序更容易维护。

你可以不用造轮子

本文的实例代码,只是一个极其简单的轮子,甚至连轮子都说不上,写这么一个示例只是为了让大家能大致明白实现的原理。现流行的语言/框架,几乎都有提供对应的组件:

如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的!交流经验!自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地

总结

虽然我只是写了 10 行代码,但希望这 10 行代码能给你一点优化代码的灵感。

标签:__,10,Python,代码,订单,handler,主流程,优越感
来源: https://blog.csdn.net/wcg541/article/details/99657165