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

  • 会用JOIN,却不懂编程的“程序员”(3)已关闭评论
  • A+
所属分类:MySQL python

1.1. 前言

对于之前那种每一个功能都要将SQL语句分成简单语句,取出数据再拼凑。这种方法肯定不是我们想要的结构。这样对任何人都没有好处。而且如果有增加了需求,比如需要查询某个用户在某个店铺下了什么订单。这是我们又要写一遍简单的获取用的信息和订单信息的SQL。这样做显然会让我们的程序边的冗长。

1.2. 改进思路

这时候我们已经把SQL的粒度降低到了最小,说明的每个SQL的复用性将会很高。这时候我们就需要想到分装了。

1.3. 我对分装的理解

复用性高,使用平凡的功能,创建一个方法将它包装起来,提供给其他人调用。

1.4. 需要分装什么

很明显我们需要将每个拆分的SQL进行分装变成一个方法。为了我们更加方便的使用。这样我们在获取数据的时候就不需要关心SQL是如何编写的了。

1.5. 程序实现

该程序我将拆分的SQL分表分装在4个方法中。如下表所示:

分装的方法 方法功能
get_user_info 通过用户ID获得“用户”信息
get_order_info 通过用户ID获得“订单”信息
get_order_good_info 通过订单ID获得“订单商品”信息
get_coupon_info 通过订单ID获得“订单使用的券”信息

 

其中有一个业务方法(get_order_detail)实现了用户订单相关信息的获取:完整代码如下:

最后输出的结果:

源代码:no_join_2

上的代码显然让人一看,有一种想自杀的心都有了,不是说会变的简单么怎么,看上去代码还是那么多,而且还引入了分装,这到底是什么鬼!!!此时此刻的我只能“额......”。

麻烦大家先抛开代码还是很多的缺点,我们再来分析一下,如果现在的需求变了,说前台不用显示券的信息。这时候我们是不是只需要将get_order_detail方法中有关券的东西给注释掉就好了,而不需要去看之前的SQL是如何写的。如果,需求有变了说,需要显示每个订单是属于哪个门店的(假设我们这里有门店表,并且订单中有“门店ID”)。是不是只需要分装一个类似的get_store_info方法来回去门店信息(这个方法里面还是简单的SQL)。并只要在业务方法get_order_detail中调用get_store_info方法并将结果和之前的结果进行拼凑就好。这时候是不是连之前的SQL都不需要看只需要知道之前的输出是什么。

(提示:需求变更的时候,需要修改代码时,发现要看很长的SQL的时候,往往是很痛苦的。并且如果是修改自己编写的SQL还好,如果是交给其他人来修改。我只能说:“兄弟辛苦你了,为了你的不吃亏。你也写复杂SQL让给别人改吧。这样你的心情应该会好”)

如果大家文章看到这里,觉得要使用拆分SQL能很好的应付业务的变更这一点没有打动你。你的问题关注在我要代码少。那就请你往下看了。

 

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

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

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

weinxin
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~