坏味004:重构post+json参数验签
#Smell #Java #TreeMap #String #Lambda
1.目标:满篇屎黄难受
重构图①代码(国内的参数验签都差不多),使之香。
图①:Idea中报了提醒,仍被无视。
2.坏味:功能对但有味
图①是在CodeReview中逮住的一段有味道的代码, 其逻辑表述和注释完全符合其功能要求。即, 把kv结构的数据,按key的自然(ascii/unicode)顺序, 拼接成query-string格式,再加secret后,进行md5sum。 其坏味道如下,
(a) Map未使用泛型,没有强类型加持。
(b) 数据结构知识短板,仅按字面写代码。
(c) 字符串拼接无技巧,冗余。
(d) 无视Idea提醒,满屏屎黄。
3.假想:你有很多同事
假想以下修改风格,体会其中的差异和优缺点。
图②:洁癖猿,按Alt+Enter,挨个消除了提醒
图③:性能狮,用了TreeMap和StringBuilder特性
图④:stream狮,以Stream-forEach代替for-loop
图⑤:lambda狮:用stream和lambda一气呵成。
图⑥:泛型狮:用Wildcards泛型更优雅,更好。
4.总结:师傅领进门
本文重构涉及到的知识点很多,简单列一下,但一篇只解释一个,其他后续有讲。
(a)数据结构很重要,了解CollectionFramework中的所有实现类。
(b)必须掌握类型系统,尤其泛型,java的泛型很简单。
(c)for-loop比stream-foreach各有有势,分场合使用。
(d)字符串拼接有技巧,也有内存和GC考虑。
本篇主要讲TreeMap,看类签名,描述,参数,异常。 提高自己,关键靠日常积累和搜商。
图⑦:选中TreeMap,Ctrl-q,看到java8的官方文档。
–
※ 我们的征途是星辰大海 ※
题图:Astronomy Picture of the Day, Discover the cosmos!