在有美一人:Python加peewee让数据库访问更简单zhuanlan.zhihu.com
一文中有几个函数需要连接数据库,这样就导致了一些重复代码
有过Java Spring开发经验的同学就要跳出来了,这样不简洁,Spring早就可以AOP了,根本不用操心数据库连接的问题。Python当然可以啊,而且是语言级别就已经支持了,这个功能叫decorator,中文都叫装饰器。有没有想起什么?对了,这就是设计模式里的decorator模式
我们创建一个新方法,在方法内再建个wrapper方法,虽然感觉很奇怪,但就是这么写的。当然这两个方法名可以随便起了,样式一致即可
func 就是要被修饰的方法,做为一个参数传入到db_connect方法里,我们就可以在func前面连接数据库就好。最后返回wrapper。这也是python比较特别的地方,方法是可以作为参数传来传去的。这比Java只能在类级别的反射上做文章吧,一个简单的功能也需要建个类
最后我们在每个需要连接数据库的函数名前加上@db_connect就可以了。每个函数都会自动连接数据库。又有同学说了,这有什么区别,行数没变啊。但这样你不觉得核心代码更简洁了吗?不需要操心数据库连接的问题了。同样你还可以在db_connect里加些日志或者事务连接什么的,这样就是全局性的改变了,不用你每个函数都去修改一遍。
其实这就是Python元编程,也就是在你的代码上再编程去操作你的代码,虽然听着有点呦口,但是做到后很爽。 有兴趣的同学可以看下Python的官方文档。