Android開發(fā)教程之重構(gòu)程序_第1頁
Android開發(fā)教程之重構(gòu)程序_第2頁
Android開發(fā)教程之重構(gòu)程序_第3頁
Android開發(fā)教程之重構(gòu)程序_第4頁
Android開發(fā)教程之重構(gòu)程序_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Android開發(fā)教程之重構(gòu)程序什么是重構(gòu)程序清晰易讀好處MVC模式MVC模式套用1可以運(yùn)作的程序跟可以維護(hù)的程序之間,還有一道難以言說的鴻溝。 一個(gè)程序設(shè)計(jì)之初,是用來解決特定問題。就像在前面章節(jié)的學(xué)習(xí)中,我們也已經(jīng)寫好了一個(gè)可以運(yùn)作的 BMI 程序。但是對(duì)程序設(shè)計(jì)來說,當(dāng)我們寫越多程序,我們會(huì)希望可以從這些程序之中,找到一個(gè)更廣泛適用的法則,讓每個(gè)程序都清晰易讀,從而變得更好修改與維護(hù)。什么是重構(gòu)2讓程序清晰易讀有什么好處呢?當(dāng)一段程序被寫出來,之后我們所要做的事,就是修改它與維護(hù)它。一旦程序越長越復(fù)雜,溷亂到無法維護(hù)的境界時(shí),就只好砍掉重練。 所以若我們能透過某些方式,例如重新組織或部分

2、改寫程序碼,好讓程序容易維護(hù),那麼我們就可以為自己省下許多時(shí)間,以從容迎接新的挑戰(zhàn)。 我們回過頭來看看前面所寫的 Android 程序。Android 平臺(tái)的開發(fā)者已經(jīng)先依照 MVC 模式,為我們將顯示界面所用的 XML 描述檔、顯示資源所用的 XML 描述檔從程序碼中區(qū)隔開來。將與程序流程無關(guān)的部份分開來組織,讓程序流程更清楚,相對(duì)易于維護(hù)。程序清晰易讀好處3而在主要程序碼(Bmi.java) 方面,雖然程序碼量很少,還算好讀,但整體上并不那麼令人滿意。例如,假使我們要在這段程序碼中再多加上按鍵、適用于多種螢?zāi)伙@示模式、或是再加入選單等等內(nèi)容,很快地程序碼就開始變得復(fù)雜,變得不容易閱讀,也開

3、始越來越不容易維護(hù)。 因此,在繼續(xù)新的主題之前,我們先來重構(gòu)這個(gè) BMI 應(yīng)用程序。在重構(gòu)的過程中,也許我們能學(xué)到的東西,比學(xué)任何新主題還重要呢 。4我們打算重構(gòu) BMI 程序的部份 java 程序碼。既然我們已經(jīng)照著 Android 平臺(tái)的作法,套用 MVC 模式在我們的程序組織上,那麼,我們不妨也試著套用同樣的 MVC 模式在 Bmi.java 程序碼上。 如何套用 MVC 模式到 Bmi.java 程序碼上呢? 原來的程序片段是這樣的 代碼 : 1 Override 2 public void onCreate(Bundle icicle) 3 super.onCreate(icicle

4、);MVC模式54 setContentView(R.layout.main); 5 6 /Listen for button clicks 7 Button button = (Button) findViewById(R.id.submit); 8 button.setOnClickListener(calcBMI); 9 6上面的程序片段中,包含了所有 Android 程序共用的標(biāo)準(zhǔn)內(nèi)容, 整個(gè)程序的大致架構(gòu)在前面章節(jié)中已經(jīng)講解過,現(xiàn)在我們從中取出我們感興趣的部分來討論: 代碼: Button button = (Button) findViewById(R.id.submit); bu

5、tton.setOnClickListener(calcBMI); 在第7 行我們看到一段程序碼來宣告按鈕物件,與針對(duì)該按鈕物件作動(dòng)作的程序碼。 button.setOnClickListener 程序碼的意義是指定一個(gè)函式,來負(fù)責(zé)處理 按下 這個(gè) 按鈕 后的動(dòng)作。7我們可以想像,在同一個(gè)畫面中,多加入一些按鈕與欄位后,onCreate 這段程序?qū)⒆兊糜纺[,我們來試著先對(duì)此稍作修改: 首先,我們可以套用 MVC 模式,將宣告界面元件( 按鈕、數(shù)字欄位) 、指定負(fù)責(zé)函式等動(dòng)作抽取出來,將 onCreate 函式改寫如下 代碼: Override public void onCreate(Bund

6、le icicle) super.onCreate(icicle); setContentView(R.layout.main); findViews();MVC模式套用8setListensers(); 接著我們將宣告界面元件的部份寫成一個(gè)獨(dú)立的findViews 函式: private Button calcbutton; private EditText fieldheight; private EditText fieldweight;9private void findViews() calcbutton = (Button) findViewById(R.id.submit); f

7、ieldheight = (EditText) findViewById(R.id.height); fieldweight = (EditText) findViewById(R.id.weight); 順便將原本很沒個(gè)性的按鈕識(shí)別參數(shù)button 改名成calcbutton ,以后在程序中一看到calcbutton ,就知道是一個(gè)按下后將開始處理計(jì)算工作的按鈕。10同樣地,我們也將指定特定動(dòng)作( 按按鈕) 的負(fù)責(zé)函式獨(dú)立出來: 代碼: /Listen for button clicks private void setListensers() calcbutton.setOnClickLi

8、stener(calcBMI); 如此一來,我們就將程序邏輯與界面元件的宣告分離開來,達(dá)成我們重構(gòu)的目的。11完整程序如下: 代碼: package com.demo.android.bmi; import java.text.DecimalFormat; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextVi

9、ew; 12public class Bmi extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle icicle) super.onCreate(icicle); setContentView(R.layout.main); findViews(); setListensers(); 13private Button button_calc; private EditText field_height; private EditText fie

10、ld_weight; private TextView view_result; private TextView view_suggest; 14private void findViews() button_calc = (Button) findViewById(R.id.submit); field_height = (EditText) findViewById(R.id.height); field_weight = (EditText) findViewById(R.id.weight); view_result = (TextView) findViewById(R.id.re

11、sult); view_suggest = (TextView) findViewById(R.id.suggest); 15/Listen for button clicks private void setListensers() button_calc.setOnClickListener(calcBMI); private Button.OnClickListener calcBMI = new Button.OnClickListener() public void onClick(View v) DecimalFormat nf = new DecimalFormat(0.0);

12、16 double height = Double.parseDouble(field_height.getText().toString()/100; double weight = Double.parseDouble(field_weight.getText().toString(); double BMI = weight / (height * height); /Present result view_result.setText(getText(R.string.bmi_result) + nf.format(BMI); 17 /Give health advice if(BMI

13、25) view_suggest.setText(R.string.advice_heavy); else if(BMI20) view_suggest.setText(R.string.advice_light); else view_suggest.setText(R.string.advice_average); ; 18同樣是calcBMI 函式,在完整程序中,改將calcBMI 函式從原本的OnClickListener 宣告成 Button.OnClickListener 。這個(gè)改變有什么差別呢? 閱讀原本的程序碼,在匯入(import) 的部分可以看到,OnClickListen

14、er 是來自于android.view.View.OnClickListener 函式: 代碼: import android.view.View.OnClickListener; 改成Button.OnClickListener 后,Button.OnClickListener 就變成來自 于android.widget.Button 中的OnClickListener 函式,在查閱程序時(shí),整個(gè)Button 與OnClickListener 之間的關(guān)係變得更清晰。19另外,我們偷偷將OnClickListener 中其他會(huì)存取到的界面元件識(shí)別參數(shù),也補(bǔ)進(jìn) findViews 宣告中: 代碼:

15、 private void findViews() button_calc = (Button) findViewById(R.id.submit); field_height = (EditText) findViewById(R.id.height); field_weight = (EditText) findViewById(R.id.weight); view_result = (TextView) findViewById(R.id.result); view_suggest = (TextView) findViewById(R.id.suggest); 20同時(shí),我們也把識(shí)別參數(shù)的命名方法做了統(tǒng)一:按鈕的識(shí)別參數(shù)前加上 button_ 前綴,可輸入欄位的識(shí)別參數(shù)前加上field_ 前綴,用作顯示的識(shí)別參數(shù)前則加上view_ 前綴。將變數(shù)名稱的命名方法統(tǒng)一有 什么好處呢?好處在于以后不管是在命名新變數(shù),或是閱讀程序碼時(shí),都能以更快速度命名或理解變數(shù)的意義,讓程序變得更好讀。 我們也把原本在程序中直接寫進(jìn)的字串21代碼: TextView result = (TextView) fi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論