会用JOIN,却不懂编程的“程序员”(5)

1.1. 前言

在上一篇文章我们展示了使用装饰器来完成拆分后的编写SQL。好处是让代码变的更加的厉害,更容易的应变未来需求的变更了。但是,麻烦的是免不了需要添加新的装饰器。当然这对哪些较劲的来说肯定还说:之前的开发麻烦,代码有没减。这种效果当然也不是我想要的。

下面我们就来使用“动态装饰器”来实现,让我的代码更加的少。

1.2. 回顾和找相同

回顾之前装饰器的3个方法(join_order、join_order_good、join_coupon),细心的会发现它们里面的代码几乎是相同的,除了需要关联的字段和调用获取数据方法如下表:

装饰器方法 装饰器中需要调用的方法 拼凑时需要关联的字段
join_order get_order_info user_id
join_order_good get_order_good_info order_id
join_coupon get_coupon_info order_id

通过比较代码和分析。我们想我们能不能将 装饰器中需要调用的方法  拼凑时需要关联的字段 通过变量的方式带入装饰器,这样我们就可以使用一个装饰器来满足所有装饰器的功能呢?答案是肯定的。

1.3. 实现程序

我们通过实现一个动态装饰器方法(join_data)来完成我们的目标。这个装饰器有两个参数func_name、col_name:

func_name:需要动态执行的方法名。

col_name:两个结果集关联的字段。

完整程序如下:

最后结果:

源代码:use_dynamic_decorator

现在来看一下我们的业务代码。代码量上少了吧。现在的代码量将会比你的jion还少了吧一个业务只需要在方法上面不端的添加注解(annotation)就好了。

我们来看一下他的应变需求变化的能力。现在业务部需要展现券的信息了,这时我们只需要将如下代码删除了:

现在有一个需求,订单需要展示门店的信息(订单和门店是以store_id关联)。这时我们只需要查看是否有人实现过相关的方法比如get_store_info,之后只需要在业务方法get_order_detail的头上加上注解@join_data('get_store_info', 'store_id')。然后就能满足业务的需求了。

而反过来看,如果使用join的方法写的代码。你是不是需要先看懂之前的join是怎么写的,还要考虑我的代码应该要怎么添加。而且join的代码的扩展性无疑是很差的,并且对数据库的查询的并发也会大打折扣。

如果到了现在你们还说使用join能提高开发效率。会增加代码量的。我只能说:对不起,我错了,原谅我的无知吧。

 

昵称:HH
QQ:275258836
ttlsa群交流沟通(QQ群②:6690706 QQ群③:168085569 QQ群④:415230207(新) 微信公众号:ttlsacom)

感觉本文内容不错,读后有收获?

逛逛衣服店,鼓励作者写出更好文章。

HH

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

  1. 匿名 5

    :evil: :!: :!: aaa顶顶顶顶