程式碼重構-總結 前輩的重構經驗
總結 前輩的重構經驗
完成這樣的重構,需要幾個注意點,分享一下
1 一定要在有充分測試程式碼的前提下重構
2 測試程式碼的作用是
1 需求固定了
2 保證重構後邏輯不會發生變化
3 有測試心裡有底,可以放心進行大量的結構上的重構
3 重構時,先梳理程式碼,刪除無用的邏輯,進行小的消除重複程式碼重構,封裝小方法重構,等等,目的是讓大段大段程式碼之前的耦合度降低,在這樣的基礎上才能方便的套用一些合適的程式碼組織方法(即設計模式),抽取合適的模型等等
這些說起來比較片面需要結合自己的經驗看別人的程式碼或者 重構那本書慢慢積累
另外說幾句
1 目前的程式碼,雖然我很滿意,但是肯定還是有不足的地方
比如,如果有程式碼經驗的人看到這些程式碼,肯定會吐槽出一些需要重構的地方
2 有些程式碼組織方式沒有好壞之分
這種情況下,以團隊大部分人的習慣來
針對Android有以下幾點需要注意:
1.是不是應該把資料重新整理操作放在onResume()中?@Override public void onResume() { super.onResume(); refresh(); } public void refresh(){ initData(); } 這樣不合適,在什麼時候重新整理是根據需要來的,並不是每次onResume()的時候都需要重新整理。 假如使用者關閉了屏幕後再開啟螢幕,頁面會重新整理,這樣沒有必要,也許幾秒中前剛重新整理過。 網易新聞客戶端就不是這樣的。 2.關於activity,fragment與彈窗3.copy佈局檔案和複用佈局檔案的優缺點重用優點:減少佈局檔案個數,如果幾個介面的佈局問個始終一致,那麼可以使用 重用缺點:如果其中一個佈局檔案有所改動,那麼其他頁面將不能再使用,因為佈局檔案中沒法使用 if else 。copy優點:一個頁面對應一個xml檔案,完全解耦 copy缺點:會大量出現重複的程式碼 總結:需求隨時都可能變動,還是把佈局解耦比較好 4.優化程式碼的思路5.千萬要保護好自己的程式碼昨天跟我說某某模組的介面改了,要重新做,我做了。 今天來的時候又跟我說暫時不改了,還是用之前的程式碼。天啦,幸虧我沒有刪掉之前的程式碼,不然死的心都有了。 so,程式猿們,保護好你自己的程式碼。 6.模板方法沒有寫好會很悲劇模板方法寫好了,比如BaseAcitivity,然後開始寫它的子類,忽然除錯的時候發現模板的方法有問題,比如說要調整方法呼叫的順序或者改變方法呼叫的位置,這下好了,你的N個子類都是按照之前的模板方法去寫的,so 你就一個一個去修改子類吧。另外,要千萬注意別人修改了公用的模板方法,要及時pull和push程式碼,不然自己寫的很多程式碼都白費了。 7.不要頻繁重複的呼叫資料比如你要獲取10-個新聞列表資料,而且你要同一時間去獲取,那就得建立10次Http連結,這很費時的。最好的方法是讓伺服器把10個新聞列表資料寫在一個xml檔案中,這樣會顯著的節約時間。wo so,當進行遠端呼叫時,從資料提供者反覆呼叫取得資料會嚴重影響效能,比如資料庫呼叫、Web服務呼叫或者其他編解碼呼叫。這種情況下可以使用Facade模式一次獲得所有所需的資料,儘可能減小連線成本和在網路上傳輸資料的成本。8.類中的成員變數前加"m"本類的所有成員變數前加"m",好處是:敲"m"就能提示本類的一些成員變數9.一定要有自己的技術部落格和帖子別人的部落格和帖子是別人的,要有自己的,不斷補充,不斷完善,以後再檢視的時候才方便。 另外 ,強迫自己寫技術部落格和帖子就是強迫自己總結,加深技術知識的印象。10.一個類應該純粹,一個類就只應該做一件事情比如寫一個瀑布流類(自定義View),幹了很多事情,佈局了瀑布流模型,設定了重新整理功能。 這不應該在一個類中出現,瀑布流就是瀑布流,重新整理是另外一回事,獲取資料又是另外一回事!不要混在一起,寫在一個類中! 一個類應該是純粹的,儘量的簡單,就是幹一件事情。完成一個功能我們可以把多個類組合在一起,或者引用等等方法。 好處在於拆卸方便,當不需要什麼功能的時候能快速明晰的剝離掉。如果什麼程式碼都混在一塊那是灰常難以剝離的。 |
下面是一些經常出現的錯誤:
1、安裝apk檔案出現相應的錯誤
(1)提示錯誤OLDER_SDK,這表明現有的android的sdk版本太低,應該使用較高版本的sdk。
(2)提示錯誤UPDATE_INCOMPATIABLE,這表明apk與現有的sdk存在相容性上的衝突,可以檢查一下是否使用了完全一樣的skin等引數設定,這些引數與apk應用程式的不一致也會導致安裝時候出現錯誤。
(3) 有時安裝apk沒有出現錯誤,但是一執行就出現“程式異常終止”的錯誤:
原因一般有:應用程式的許可權沒有設定好,出現了問題;應用程式可能會使用sdcard,而沒有掛載sdcard映象。
(4)目前Android的開發主要是基於800*480(WVQA800)的面板,面板的不同可能會影響應用程式的相容性。
2、在模擬器的sdcard映象插入的圖片後,不能通過圖片瀏覽器進行顯示。
如果是在android執行的過程中,往sdcard中插入圖片,不會立即顯示出來,需要重啟android虛擬器。
3、開發Android應用程式,容易忽視的一點就是:忘記給應用程式賦予合適的訪問許可權。<uses-permission>
在通過DDMS模擬GPS定位時,模擬器在install apk之後,始終顯示“無法顯示物理位置”的錯誤資訊,後來重啟一下,就可以了。所以得到啟發:如果某個應用程式有一定問題的話,嘗試把android重啟一下,或許就可以了!
4、android的Google MAP相關內容
(1)Google MAP API的獲取
Android Maps API Key Signup
The Android Maps API lets you embed Google Maps in your own Android applications. A single Maps API key is valid for all applications signed by a single certificate.
You also need a Google Account to get a Maps API key, and your API key will be connected to your Google Account.
Android Market enables developers to easily publish and distribute their applications directly to users of Android-compatible phones.
(2)執行android與Google Map相關的應用程式時,提示錯誤:Failed to find an AVD compatible with target 'Google APIs'.
其實問題在於:之前應用程式載入的都是沒有Google api的android21的平臺,google api是可選包。所以必須重新建立一個有android和google api的21平臺。
5、如何匯入Android SDK中的Sample程式碼
(1)不能通過file->import來載入,因為這裡import是已經建立好的工程,而Sample中的只是source檔案
(2)所以需要file->new->android project->creating project from existing sample.在下拉框中選擇具體的Sample。
注意不能選擇creating projects from exisiting source,這樣建立的工程是有錯誤的,沒有R.java檔案。
(3)出現的沒有R.java檔案的問題 :
存在這樣一種可能:由於res目錄的一些xml檔案中對於單引號沒有使用“/”進行轉義,這個還是通過console中的錯誤提示看出來的。
6、安裝改進版本後的apk檔案出現如下的錯誤
Com.xiedong.calendar:
signatures do not match the previously installed version ignoring
Package couldn't not be installed in /data/ app / com.xiedong.calendar.apk
解決方法:
(1)刪除之前建立的avd,然後重新建立,編譯和執行
(2)或者在已經存在的avd基礎上,啟動過程中選擇上 wipe user data 如截圖所示
下面是一些好的程式碼庫案例:
Android經典的開源專案其實非常多,但是國內的部落格總是拿著N年前的一篇複製來複制去,實在是不利於新手學習。今天爬爬把自己熟悉的一些開源專案整理起來,希望能對Android開發同學們有所幫助。另外,如果你有比較好的專案推薦,也煩請在評論裡分享出來,我會定期更新部落格內容。
專案篇:- :oschina網站的客戶端哦,wp版,iOS版都有開源
- :今天才知道是開源的,趕緊收藏
- :谷歌開發者大會應用,雖然有點難懂,還是很有參考價值(比如其中的圖片載入)
- :eoe網站Android客戶端也開源咯,嘿嘿
-
:一個上傳圖片到facebook的客戶端,其中使用了很多開源專案,作者()本身也非常NB~
- :可以實現類似FlipBoard那種華麗麗的翻頁
- :可以拖動item重新排序的listview,效果非常贊
- :咳咳,有些同學非常喜歡Android的holo風格,這個專案絕對讓你happy
- :這玩意可以讓ViewPager翻起來更酷,誰用誰知道~~
- :這個是抽屜介面(就是facebook那種)的各種實現版本中,最好的,木有之一!
- :iPhone上經常有這個,就是listview的……不知道怎麼解釋,自己下載看看吧
- :這是一個瀑布流佈局的實現,還不是很完善,但作為學習的案例或者在其基礎上擴充套件還是不錯的
- :android的非同步請求元件,我個人習慣使用asynctask,不過這個實現還是很優秀的,也推薦給大家
- :大家熟知的ActionBar在2.x上的相容性方案;類似的相容性元件還有許多,有時間為大家一一列出;
- :不止是一個SDK那麼簡單哦,比某浪和某人的SDK強幾個數量級;
- :想在2.xSDK上使用Android 3.0新增的動畫API,那就是它了;沒用過的同學一定要試試哦,非常方便~
- :讓listview的item可以向右滑動,新版Gmail和Pocket裡面有用到哦~
- :Android的RESTful封裝,沒聽過RESTful?你去死吧
- :和上面的DataDroid同樣屬於美化底層程式碼的,這個lib簡化了不同元件之間的事件傳遞
- :Android3.0以上才有的switch,有好心人給遷移到2.x上了,哈
- :我們都知道webview,也知道Android的chrome又自己的核心,這個專案就是把chrome的核心給匯出來做成一個chromeview了,大家可以在自己的專案裡用,有興趣的可以玩玩
- :來自square的圖片非同步載入,好像是最近才開源的,API風格很獨特,哥很喜歡~
-
:把actionbar做成毛玻璃效果,看上去還是很漂亮的
- :各種專案很多,就是不容易挖掘,但是開發者必備
- :曾經一般,現在越做越好了,很多開源專案;
- :經過一番整理,現在非常強大;小作品居多;
- :我曾經想做這麼一個網站來著,很多開源元件的集合,嘿嘿
- :Android開發組核心成員,主要複製widget開發,我們用的Listview啥的都是這位帥哥寫的。
-
爬爬的部落格:歡迎造訪,嘿嘿