循环语句

我们常用到循环,现在有了新的函数,例如 php 的 foreach(),java 的管道操作(如 filter 和 map),可以帮助我们更快地处理数据。

冗赘的元素

给代码增加结构(如类和函数)可以支持变化、促进复用。但可能最初在编写类或函数时觉得以后可能会变得更大、更复杂,结果却越变越小,最后剩一个函数,那么这时便要考虑将其归并到其他地方了。

夸夸其谈通用性

如果你总是觉得“总有一天需要做这事”,然后企图以各种各式各样的钩子和特殊情况来处理一些事情,那么坏代码就出现了,这样做往往造成系统更加难理解和维护。

应该遵循这样的原则:如果所有的装置都会被用到,那就值得那么做,如果用不到,就不值得。

临时字段

有时某个类的某个字段仅为某种特定情况而设,这样的代码不容易理解,因为你通常认为对象在所有时候都需要它的所有字段,在字段未被使用的情况下猜测当初设置它的目的,会让你很疑惑。

最好是将这个字段和与这个字段相关的代码集中在一块。

过长的消息链

如果你看到用户向一个对象请求另一个对象,然后再向后者请求另一个对象,接着继续请求另一个对象……这就是消息链。这意味着代码紧耦合,一旦对象间的关系发生变化,那么客户端就得做出相应的修改。

通常是将调用对象的代码用函数封装起来,这样客户端不需要知道对象间的关系,只需要知道调用这个函数就可以返回最终需要的对象。

中间人

前面消息链讲到的封装如果使用不恰当,可能会造成过度使用,这时应该移除中间人(封装的函数),直接与真正负责的对象打交道。

内幕交易

模块之间大量交换数据,增加模块间的耦合,应当尽量减少这种情况。

过大的类

如果单个类做太多事情,往往会出现很多字段与重复代码。最好是将相关的变量提到新类,或者提炼相同的代码到函数去。

异曲同工的类

当存在不同的类却在做同样的事时,可以通过搬移函数到其中一个类,逐渐消灭另一个类。

纯数据类

纯数据类是指除了拥有一些字段和访问这些字段的函数之外,便没有其他用处了。可以尝试找出这些函数被调用的地点,尽量将调用行为搬移到纯数据类来。

被拒绝的遗赠

子类应该继承超类的函数和数据,如果存在子类不想继承的,说明继承体系设计错误。这时可以新建一个兄弟类,将不需要的函数推给兄弟类,这样超类就只持有子类共享的东西。

子类不想继承超类的接口与不想实现超类的接口是两回事,既然不想继承,那就直接画清界限吧。

注释

如果你发现一段代码有着长长的注释时,说明这段代码难以理解,此时需要将代码搬移到新函数,并为它取个说明这段代码用途的名字。

重构改善既有代码的设计是php,下篇 |《重构 改善既有代码的设计—笔记》| PHP 技术论坛...相关推荐

  1. 【汇编实战开发笔记】从汇编代码中找出一段普通的for循环变成“死循环”的根本原因(RT-Thread技术论坛优秀文章)

    文章目录 1 前言 2 问题描述 3 简单分析 4 场景再现 5 柳暗花明 6 找到证据 6.1 究竟是不是警告 6.2 盘根问底 6.3 解除风险 7 扩展延伸 7.1 RISC-V架构 7.2 8 ...

  2. 写代码犹如写文章: “大师级程序员把系统当故事来讲,而不是当做程序来写” | 如何架构设计复杂业务系统? 如何写复杂业务代码?

    写代码犹如写文章: "大师级程序员把系统当故事来讲,而不是当做程序来写" | 如何架构设计复杂业务系统? 如何写复杂业务代码? Kotlin 开发者社区 "大师级程序员把 ...

  3. 50天10万行代码,一号专车系统重构细节回顾

    2013年底,我关闭当时的创业项目,无所事事之时,打电话向快的CEO Dexter请教,当时快的和大黄蜂刚刚合并,他建议我可以先和大黄蜂CEO李祖闽(Joe)聊聊. 和Joe第一次见面是在虹桥火车站的 ...

  4. 基于matlab的64QAM,通信调制体制设计之64QAM性能分析MATLAB仿真及代码

    通信调制体制设计之64QAM性能分析MATLAB仿真及代码 通信调制体制设计之64QAM性能分析MATLAB仿真及代码 任务背景 弗雷泽岛旅游经理在审查您之前建立无线链路任务的解决方案时,正在研究使用 ...

  5. SoC嵌入式软件架构设计之二:虚拟内存管理原理、MMU硬件设计及代码分块管理...

    程序的大部分代码都可以在必要的时候才加载到内存去执行,运行完后可以被直接丢弃或者被其他代码覆盖.我们PC上同时跑着很多的应用程序,每个应用程序使用的虚拟地址空间几乎可以整个线性地址空间(除了部分留给操 ...

  6. html网页加入一个按钮,在html网页设计中,一个“登录”按钮怎么编写代码?

    html网页设计:一个简单的登录界面代码! 在html网页设计中,一个"登录"按钮怎么编写代码? 列如所给图片的"登录"按钮怎么用html代码显示出来,要求能够 ...

  7. 传智书城首页设计代码_(自适应手机版)响应式创意餐饮酒店装饰设计类网站织梦模板 html5蓝色餐饮酒店设计网站源码下载...

    模板名称:(自适应手机版)响应式创意餐饮酒店装饰设计类网站织梦模板 html5蓝色餐饮酒店设计网站源码下载 本套织梦模板采用织梦最新内核开发的模板,这款模板使用范围广,不仅仅局限于一类型的企业,创意设 ...

  8. 一种在旧代码上增加新需求的重构模式

    应用场景 相信大家遇到过这种场景: 旧代码中已经有一堆的if-else或者switch-case了:产品却要求在这段流程里增加一个新的功能. 这种时候大家会怎么做? 我的建议是: 重构这段代码.在重构 ...

  9. 学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作 dreamweaver网页设计与制作代码 web前端期末大作业

    HTML实例网页代码, 本实例适合于初学HTML的同学.该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代 ...

  10. 基于MATLAB的拼图游戏设计(图文详解,附完整代码)

                                                                               基于MATLAB的拼图游戏设计 内容摘要:MATL ...

最新文章

  1. 【实用快捷键】设置WebStorm中Show in Explorer(在资源管理器中打开)快捷键Alt+Shift+R(类似VSCode)
  2. java web 监控cpu、内存等。hyperic-sigar
  3. python读音发音器-python3-文本读音器
  4. 线性代数笔记:Hadamard积
  5. 迈克尔 杰克逊mv_杰克逊JSON解析错误– UnrecognizedPropertyException:无法识别的字段,未标记为可忽略[已解决]...
  6. php 不同时区时间转换,在PHP中将DateTime字符串转换为不同的时区
  7. Anti-Tech论 | 技术是如何一步一步腐蚀思想的?
  8. 直观理解:为什么A为 n 阶满秩方阵时,Ax=0 只有零解?
  9. [BZOJ1492][NOI2007]货币兑换Cash(斜率优化+CDQ分治)
  10. 获取ie窗口的IHTMLDocument2对象
  11. 几招紧急应对夏天雷雨天机房断电的方法!
  12. 河北源达靠谱吗?股市如战场,可靠的选股软件很关键
  13. win10删除*某些设置由你的组织来管理
  14. 【华为机试真题 Python】一个正整数到 Excel 编号之间的转换
  15. JavaScript中原生Array数组方法详解
  16. ImageView(仿QQ图片查看器)
  17. 拼接URL在线生成二维码
  18. MATLAB绘制主函数动态图,matlab绘制动态图
  19. Java计算1到100阶乘和
  20. Reflections on Trusting Trust(关于托付信任的思考)

热门文章

  1. 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
  2. 使用 Android 实现联网
  3. js时断时续————动态参数传递
  4. 苹果系统的优点和缺点
  5. ms sql 聚合事例
  6. 解决Flash影片中的图片抖动锯齿
  7. Centos7开启SSH服务
  8. C++虚函数表,虚表指针,内存分布
  9. VS2017-MFC-生成二维码测试小程序
  10. oracle 唯一约束作用,想问下在表上建唯一索引和使用索引+唯一约束,从功能和性能来说有什么差别?...