初學者如何進行代碼重構

只要你想,哪怕是初學者也能夠對代碼進行重構。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……

相關文章
相關標籤/搜索