1. 程式人生 > >怎麼去除重複程式碼

怎麼去除重複程式碼

 

1、為你的專案定義一個基Activity或Fragment

無論你的專案大或小,定義一個基Activity或Fragment總是有好處的。隨著專案的發展,會有大量的公共程式碼可以抽出來放到基類裡去。或者在基類裡面做一些專案特色的事情。再或者新增一些統計,崩潰反饋等等。在一個基類裡面改動總比把每個Activity或Fragment裡面都改一遍要好的多。

2、程式碼的去重複

從程式碼上去除重複的程式碼就是用通用的重構技巧,比如提煉方法,抽象基類,提煉常量等。

但是光是程式碼還不夠,因為Android的頁面程式碼跟佈局檔案的關聯非常大,通常Activity或者Fragment都是為了操作佈局頁寫的,所以要想徹底的減少程式碼的重複,還必須先減少佈局的重複。 

3、用include減少區域性佈局的重複

標籤是減少佈局重複的利器,它的作用是把另外一個佈局檔案全部無修改式的嵌入到標籤所在的位置。這與C/C++語言的預處理指令#include是一樣的。在WEB框架式開發中,也非常常用HTML模板,其中也有類似的include。目的也是減少程式碼的重複。

要想把include用的恰到好處,首先要做的就是把整體佈局模組化,從整體的佈局出發,找出可複用的區域性佈局或佈局組合,把它們放入單獨一個佈局檔案中,然後在其他的地方就可以include了。

4、用ViewStub減少整體的佈局的重複

前面是找出佈局中的可複用佈局組合,include以減少重複。但有些時候是反過來的,也就是說有幾個頁面,它們整體的一樣的,但是某個區域性是不同的,這個時候include就不行了。這個時候就可以使用一樣的整體佈局+ViewStub來做佈局。

ViewStub是一個輕量級別的,不可見的View,當ViewStub被設為visible時,或者顯示呼叫layout()時,才會去把它所指向的佈局渲染出來,所以它非常適合處理整體相同,區域性不同的情況。關於ViewStub的使用可以參考這篇部落格。 具體的策略是:

  • 規劃整體佈局,抽象出共同的佈局,把可變的佈局識別出來
  • 寫整體佈局,對於可變的區域性佈局用ViewStub替代
  • 用一個基Fragment來操作整體佈局。
  • 建立基Fragment的子類,每個子類,用真正的佈局來替換ViewStub。

5、多用引用而不是寫死

這點是非常重要的,Android的強大之處在於,所有的資源的指定都可以用引用,而非直接寫死,直接寫死就會出現重複程式碼,比如顏色,背影,字串,佈局,ID,度量(dimen),風格等等。那麼,我們在使用的時候,也儘可能的使用引用,這樣非常易於複用,修改和定製,從而也就更方便複用。

6、分析,分離變與不變

其實程式碼的去重複的關鍵都在於要分析出可變與不可變,共性和特性,這是抽象與封裝的基礎。這個沒有直接可操作性的建議,只能靠自己平時多多積累,以及遇到問題時多多思考。

另外,就是對於重複的定義是達到三次及三次以上。如果僅出現二次,並且,無可能出現別一次,這個時候其時,要不要去重複有在商榷,寫第二次時,花時間重構,與拷貝或重新實現,其實程式碼差不多。當發現第三次實現某個東西時,就要考慮好好的重構一下,減少重複。

還有,就是,在專案開始不要考慮的太多,不要過度設計。孤認為,不過過度設計,更不要過早優化,就根據需求和進度和發展狀況綜合來看。當出現了重複,需要重構時就立馬去做,這樣就不會出問題。但如果沒能及時去做重構,欠了債,那麼由於涉及程式碼,功能和模組都比較多時,再去重構,難度大,風險也大。就好比房屋的維護保養,當出現灰塵時就去打掃,很容易,個把小時就搞定了,但如果一直拖著,一年才打掃一次,可能要十天半個月才能完事。