初学者如何进行代码重构

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

重构是创建在代码正确能够运行的基础上对其进行优化、改进的过程,咱们要作的是使能知足最基本的需求的代码变得更易读、易维护、效率更高 。thinkphp

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

 

1.易读:框架

 咱们写的代码是给别人看的,写完的代码你不可能永远维护着,因此有必要让本身的格式代码更容易被别人看懂。less

(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……

相关文章
相关标签/搜索