2011年8月25日 星期四

虛擬世界-Amazing Runtime Platform



看到標題,或許會有些納悶:虛擬世界?為什麼我會用虛擬世界來形容Amazing Runtime Platform(以下簡稱ARP)呢?
首先,在我解釋之前,我們先來想想什麼叫做Runtime Platform。顧名思義,Runtime Platform代表的是執行平台,所謂的平台是指一個可以讓多個程式在上面執行的共同環境。
ARP中,我們透過幾種方式來建造我們自己的平台:
Front Controller
什麼是Front Controller呢?簡單來說,它就像一個服務櫃台,當使用者告訴Front Controller現在想切換到哪個視窗畫面,那它就會幫助程式進行畫面的切換。
以往我們在實作畫面的切換,可能會需要使用Switch method來進行,如:
switch (id) {

case R.layout.login:
  login(w, h);
  break;
case R.layout.amazing:
  amazing(w, h);
  break;
case R.layout.estimate:
  estimate(w, h);
  break;

}
由上面的程式碼片段我們可以看到,我們在Activity中透過id不同來切換到不同的method,再由這些method來切換畫面。
改以Front Controller的方式來進行實作時,我們則將這些method轉為Action,然後在Activity中進行addAction的動作,而當需要切換時只需要執行selectView(id)即可。
addAction(new LoginAction(this, R.layout.login));
addAction(new AmazingMainAction(this, R.layout.amazing));
addAction(new EstimateAction(this, R.layout.estimate));
selectView(R.layout.login);
這樣也許感覺沒什麼不同,一樣還是透過某個東西來進行切換,只不過由switch換成Action罷了。但是實際上在進行實作時,我們可以發現以往的寫法會造成我們的程式碼總是落落長,要維護時反而難以找尋目標。而Front Controller中,我們將Action一個個獨立成物件,我們在維護時只需要找到該Action就能進行動作了。舉個例來說,若是我們今天必須在所有畫面中加入一些設定,且這些設定都一樣。若是用以往的作法,我們可能有幾個畫面就必須重複寫幾次同樣的程式碼,但Front Controller的做法讓我們只需要Action父類別上加入該設定即完成所有的修改。
Service
這部分就相當重要了,在ARP中,我們可以將我們所負責的業務一個個轉成Service,然後提供給使用者使用。例如,今天我們有個專案必須進行估價作業,以往我們可能需透過管道先查詢一下材料單價,然後在計算尺寸,最後在進行估算,這樣的步驟下來,可能沒有10分鐘也用掉了5分鐘。這時,我們可以透過ARP發布的Service來進行估價,我們只需要簡單的輸入尺寸以及材料,那即可透過它來幫我們計算整個專案的價格,看,多省時又省力。
Messaging
ARP中另一個重要的特色就是訊息的傳遞,在所有於ARP中運行的程式中,原則上我們將做到訊息的交互使用,故我們必須用到Messaging來進行傳遞與接收。簡單來說,在ARP中,我們主要訊息傳遞的方式可分為兩種,一個是同步(Synchronous)的訊息傳遞,一個則是非同步(Asynchronous)的傳遞。
所謂同步的傳遞即是只要今天程式發出訊息給接收端,那麼接收端將馬上接收到並回傳訊息給程式,但是天有不測風雲,電腦總是有可能會關機或是維修,那這時的訊息就會找不到接收端。而若是發生這種意外時,非同步的傳遞方式便顯得十分有效,當接收端目前無法回應時,程式將會先將訊息傳遞給Server進行暫存,而當接收端回應時,訊息才會由Server進行發送。
這樣看起來有沒有覺得ARP就像是一個小小世界一般?Front Controller就如同我們手中的電視遙控器,只需要一個按鈕就可以轉台了;而Service則像是未來世界的機械人,我們只要給它指令,它就能幫我們將事情處理地妥妥當盪;最後的Messaging則像是早些時候的接線員,我們要撥電話時,往往會先撥給接線員然後再由接線員幫我們轉接,當然我們也如同現在,一支手機即可無遠弗屆。
張貼留言