phper談談最近重構代碼的感受(3)

时间:2024-12-11 11:33:38

这篇文章本来该和同一系列的文章一起写的,因为最近换工作的缘故滞后了.重构是非常细碎的叠加,有很多值得注意的地方.

1.消灭过多的临时变量.

有时候过多的无意义的临时变量,真心让人抓狂,特别是过了比较长的时间,连写这段代码的人都不知道为何这么写了.比如下面这段代码,我们先分步骤来思考这个问题.

phper談談最近重構代碼的感受(3)

一个获得全部消费的方法里面充斥着各种乱七八糟的临时变量.我们当然可以不辞辛苦地把每一行都加上饱含善意的注释,但是增加注释不是最好的办法,往往是最后的办法.

很明显的是诸多变量的含义不明,导致整个逻辑也不清楚,一会儿加,一会儿减,一会儿还乘以某个系数.第一步我们让整个代码变得可读一点,让变量命名有意义一些.然后为了更清晰,我顺便加了注释,修改后如下:

phper談談最近重構代碼的感受(3)

变量名字变长了,但是可读性也强了不少,以前一个$rest,别人不知道你到底是剩余的什么,$tmp更是不知所云.看起来比之前好得多,但是如果你的一些变量在其他地方也在使用,不如把这些变量变成query method.如下:

phper談談最近重構代碼的感受(3)

query method让代码复用,而且也成功代替了那些繁琐的注释.

2.查询和修改命令分离(CQRS).

CQRS最早来自于Betrand Meyer(Eiffel语言之父,开-闭原则OCP提出者)在 Object-Oriented Software Construction 这本书中提到的一种 命令查询分离 (Command Query Separation,CQS) 的概念。其基本思想在于,任何一个对象的方法可以分为两大类:

  • 命令(Command):不返回任何结果(void),但会改变对象的状态。
  • 查询(Query):返回结果,但是不会改变对象的状态,对系统没有副作用。

根据CQS的思想,任何一个方法都可以拆分为命令和查询两部分.

这个留作思考,给阅读者.