phper談談最近重構代碼的感受(3)
2024-10-16 11:49:08
这篇文章本来该和同一系列的文章一起写的,因为最近换工作的缘故滞后了.重构是非常细碎的叠加,有很多值得注意的地方.
1.消灭过多的临时变量.
有时候过多的无意义的临时变量,真心让人抓狂,特别是过了比较长的时间,连写这段代码的人都不知道为何这么写了.比如下面这段代码,我们先分步骤来思考这个问题.
一个获得全部消费的方法里面充斥着各种乱七八糟的临时变量.我们当然可以不辞辛苦地把每一行都加上饱含善意的注释,但是增加注释不是最好的办法,往往是最后的办法.
很明显的是诸多变量的含义不明,导致整个逻辑也不清楚,一会儿加,一会儿减,一会儿还乘以某个系数.第一步我们让整个代码变得可读一点,让变量命名有意义一些.然后为了更清晰,我顺便加了注释,修改后如下:
变量名字变长了,但是可读性也强了不少,以前一个$rest,别人不知道你到底是剩余的什么,$tmp更是不知所云.看起来比之前好得多,但是如果你的一些变量在其他地方也在使用,不如把这些变量变成query method.如下:
query method让代码复用,而且也成功代替了那些繁琐的注释.
2.查询和修改命令分离(CQRS).CQRS最早来自于Betrand Meyer(Eiffel语言之父,开-闭原则OCP提出者)在 Object-Oriented Software Construction 这本书中提到的一种 命令查询分离 (Command Query Separation,CQS) 的概念。其基本思想在于,任何一个对象的方法可以分为两大类:
- 命令(Command):不返回任何结果(void),但会改变对象的状态。
- 查询(Query):返回结果,但是不会改变对象的状态,对系统没有副作用。
根据CQS的思想,任何一个方法都可以拆分为命令和查询两部分.
这个留作思考,给阅读者.
最新文章
- 关于Ajax工作原理
- vs2013中把解决方案上传到SVN服务器
- OC:方法
- iOS8 【xcode6中添加pch全局引用文件】
- phpcms V9 内容模型管理(转)
- [LeetCode][Python]Container With Most Water
- CodeForces 76E Points
- 使用nc传输文件和目录【转】
- 配置vscode同步大神玺哥的配置
- C#中的Finalize,Dispose,SuppressFinalize的实现和使用介绍
- [PDFBox]后台操作pdf的工具类
- Java的三种代理模式(Spring动态代理对象)
- Vmware unknow Interface ens33
- 【Luogu5108】仰望半月的夜空(后缀数组)
- C#模拟HTTP请求Post JSON
- 全网最详细的PLSQL Developer + Oracle client的客户端 或者 PLSQL Developer + Oracle server服务端的下载与安装过程(图文详解)
- Windows系统安装————windows7 企业版 无法安装 NET.framework4.52-4.6版本在WIN7下解决办法
- MySQL--指定浮点型数据的精确度TRUNCATE
- 实例演示oracle数据块状态视图v$bh的用法二 热点块问题(转)
- SpagoBI系列----------[01]SpagoBI简介及安装步骤