码迷,mamicode.com
首页 > 其他好文 > 详细

初学者如何进行代码重构

时间:2015-12-14 23:13:34      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

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

 

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

 

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

初学者如何进行代码重构

标签:

原文地址:http://www.cnblogs.com/junxu/p/5046763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!