最近在看《重构:改善既有代码的设计》(后面简称《重构》),了解到一个写出好代码的思路。
在说这个话题前,好代码是什么样子,可扩展性高,可复用性高,功能内聚,代码解耦。
什么意思呢?
我用搭积木来举例:
扩展性高就是想要在搭好的积木增加一点功能,可以很简单,很方便的实现;
可复用性高就是用积木做的一个小单元,比如乐高积木的一些小零件就是可复用性的代表;
功能内聚就是积木都在内部发生作用,比如,我上次拼装乐高汽车,这个车能够在用力一推下向前走,而我在外面是看不到这个功能怎么实现的(当然我在拼的时候知道)。
代码解耦就是积木模块之间依赖关系并不大,比如,乐高积木中有一个凤凰站在枝头的,这里面凤凰和树之间的依赖关系,凤凰可以站在房子上,也可以站着人身上。
回到写好代码的生产过程,你觉得是自顶向下设计好呢,还是自底向上涌现好呢?
过去我认为是自顶向下,拥有好设计,才能写出好代码,而且我刚入职那会,我的组长也是这么给我说的。
但是这么做很考验一个人对未来功能变化的趋势,如果判断错了方向,做出的设计很快会变成扩展功能的阻碍,好设计一瞬间会变成坏设计。
《重构》提出的思路是,自底向上的涌现思路,好代码不是设计出来的,而是改出来的。
就是先去完成功能,然后进行重构代码,修改代码结构,就这样不断这个循环使得代码变好。
这样一来对设计要求没有那么高了,至少不用判断功能发展趋势。
对比自顶向下和自底向上,发现当方案很容易改变时,使用自底向上会更好,毕竟难度会较低,当方案不容易修改,比如,城市规划这种自顶向下显然更好,你总不能将原本建好的房子拆了变成马路。
一句话总结:方法没有好坏,只有是否适合。
网友评论