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

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的思想,任何一个方法都可以拆分为命令和查询两部分.

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

最新文章

  1. 关于Ajax工作原理
  2. vs2013中把解决方案上传到SVN服务器
  3. OC:方法
  4. iOS8 【xcode6中添加pch全局引用文件】
  5. phpcms V9 内容模型管理(转)
  6. [LeetCode][Python]Container With Most Water
  7. CodeForces 76E Points
  8. 使用nc传输文件和目录【转】
  9. 配置vscode同步大神玺哥的配置
  10. C#中的Finalize,Dispose,SuppressFinalize的实现和使用介绍
  11. [PDFBox]后台操作pdf的工具类
  12. Java的三种代理模式(Spring动态代理对象)
  13. Vmware unknow Interface ens33
  14. 【Luogu5108】仰望半月的夜空(后缀数组)
  15. C#模拟HTTP请求Post JSON
  16. 全网最详细的PLSQL Developer + Oracle client的客户端 或者 PLSQL Developer + Oracle server服务端的下载与安装过程(图文详解)
  17. Windows系统安装————windows7 企业版 无法安装 NET.framework4.52-4.6版本在WIN7下解决办法
  18. MySQL--指定浮点型数据的精确度TRUNCATE
  19. 实例演示oracle数据块状态视图v$bh的用法二 热点块问题(转)
  20. SpagoBI系列----------[01]SpagoBI简介及安装步骤

热门文章

  1. final、finally、finalize差异
  2. php 解析xml 的四种方法
  3. mcstructs-MircoCStructs用C语言实现的微型数据结构库
  4. Asterisk 未来之路3.0_0004
  5. 进击的Android注入术《二》
  6. IE6/7中li浮动外边距无法撑开ul的解决方法
  7. windows服务安装启动报错误1053:服务没有及时响应启动或控制请求
  8. 软件协作工具Trello
  9. 构建日均千万PV Web站点1
  10. Enumerable和yield