只要你想,哪怕是初学者也可以对代码进行重构。

重构是建立在代码正确可以运行的基础上对其进行优化、改进的过程,我们要做的是使能满足最基本的需求的代码变得更易读、易维护、效率更高 。

这里介绍的是最基础的一些重构的方法。要想系统的学习,可以看这本书《重构:改善代码的既有设计》

 

1.易读:

 我们写的代码是给别人看的,写完的代码你不可能永远维护着,所以有必要让自己的格式代码更容易被别人看懂。

(1)足够多的换行、空格 ,反正解析代码的时候并不会解析这些空白的部分,不用白不用啊,还能显的代码行数多呢^^

(2)要做到这一点,最简单的是添加足够的注释,说明类和方法的功能,方法的入参出参的含义、格式,方法中关键语句的逻辑;

(3)命名方式:用直白的类名、方法名、变量名,用驼峰型(或其他你们项目组规定的变量格式),用$a,$123这样变量名的哪怕加了注释也是够了的。

 

2.不重复:

(1)类的功能不应该重复:如果重复了说明你应该考虑使用类的继承的

(2)方法的功能不应该重复:哪怕是在不同的类中,完成相同功能的方法用同一个就可以了,将方法的属性设置为public就可以被别的类调用了。如果有很多这样通用的方法,不妨建立一个专门的类存放这样的方法,不至于在调用的时候乱了手脚;

(3)重复使用变量:在类中频繁的使用某个变量,可以考虑创建一个全局的变量取代它,降低内存的耗用;

 

3.使用设计模式进行重构

通俗的说,模式就是前面很多人在进行相同的需求开发,发现自己累死累活的做出来的东西基本都是大同小异的,那么干嘛不创建一种模板,以后碰到类似需求开发的时候,直接套用不就好了。

《深入php对象、模式与实践》一书中讲了这样一个栗子:

 

假设有这么一个基类Lesson表示新东方的课程,Lesson类有两个子类:ChineseLesson类表示语文课程,EnglishLesson类表示英语课程;按照上课的形式分为白班和晚班两种,上课的课时和收费都不一样;

于是按照传统的方法会先建立5个类:Lesson类 – ChineseLesson类 – DayChineseLesson类()和NightChineseLesson类

                             –  EnglishLesson类 – DayEnglishLesson类和NightEnglishLesson类,如图所示:

        

底层的4个子类中分别包含了课程安排的方法lesson()和收费的方法charge()

如果后面有更多种的课程或更多通用的方法(必然会如此),代码重复情况就更严重了,重复意味着高耦合,这是一种不好的现象

 

一种比较好的解决方案是采用策略模式,通过剔除最底层的方法将Lesson类 – ChineseLesson + EnglishLesson 简化,创建一个策略类Strategy类 – DayStrategy + NightStrategy 。

将Lesson类和Strategy类组合起来,通过创建Strategy类的子类添加新的课程安排或收费模式,并且不会影响到Lesson类,如图所示

            

 

常用的设计模式:单例模式、策略模式、观察者模式、工厂模式……

常用的框架:Yii,thinkphp,CI……

版权声明:本文为junxu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/junxu/p/5046763.html