星辰大海▼ 2020▼ Smell Java TreeMap String Lambda

坏味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的官方文档。

※ 我们的征途是星辰大海 ※

《坏味004:重构post+json参数验签》  1.目标:满篇屎黄难受 重构图①代码(国内的参数验签都差不多),使之香。 图①:Idea中报了提醒,仍被无视。    2.坏味:功能对但有
题图:Astronomy Picture of the Day, Discover the cosmos!