W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在實做Ajax的范例中,我們注意到Ajax.java中的代碼中沒有任何dorado的開發(fā)約定,它的樣子和我們業(yè)務(wù)層的代碼沒有什么差別:
@Expose
public String toUpperCase(String str) {
return "input:\n" + str + "\n\n" + "output:\n"
+ str.toUpperCase();
}
@Expose
public int multiply(int num1, int num2) {
return num1 * num2;
}
這是如何做到的呢?另外在multiply方法中dorado是怎么將我們的一個map對象分拆為num1和num2的呢?要解釋這幾個問題就有必要先了解一下Dorado提供的職能方法適配功能。所謂職能方法適配是基于"約定優(yōu)于配置"的設(shè)計思路而提供。這樣在很多情況下我們不需要方法具有Dorado特性,也不需要引入Dorado的開發(fā)規(guī)范。由Dorado自動判斷這個方法中的各個參數(shù)以及返回值的用途。這是一種職能化的處理邏輯。這帶給我們的好處:
如Ajax范例中的toUpperCase,Browser向服務(wù)器端傳遞的參數(shù)是我們在action的parameter屬性中定義的,因為傳過來的是一個字符串,智能方法在適配的時候會發(fā)現(xiàn)toUpperCase方法的參數(shù)就是一個字符串類型的,這樣它就自動認為你想調(diào)用的方法就是toUpperCase,并將parameter中的值作為str中的值傳入。這個方法調(diào)用結(jié)束之后返回了一個字符串給外界,而ajax調(diào)用就自動的將這個返回值作為ajax調(diào)用的返回值,如toUpperCaseAction的onSuccess方法:
// @Bind #toUpperCaseAction.onSuccess
!function(self){
dorado.MessageBox.alert(self.get("returnValue"));
}
在multiply范例中前臺傳入的是一個JSON對象,可以就認為是一個Map對象:
var parameter = {
num1: nums[0],
num2: nums[1]
};
action.set("parameter", parameter).execute(function(result) {
dorado.MessageBox.alert(nums[0] + " * " + nums[1] + " = " + result);
});
這樣后臺就拿到一個Map參數(shù),讓后對ajax這個bean進行方法匹配,會發(fā)現(xiàn)其中沒有完全匹配的,這個時候職能方法適配會將parameters中的參數(shù)拆開為num1,num2,這樣就可以發(fā)現(xiàn)存在對應(yīng)的multiply方法,并進行調(diào)用。并將結(jié)果作為ajax調(diào)用的結(jié)果返回到前臺:
action.set("parameter", parameter).execute(function(result) {
dorado.MessageBox.alert(nums[0] + " * " + nums[1] + " = " + result);
});
我們直接將這個result顯示出來。multiply范例體現(xiàn)的是智能方法適配過程中map自動拆解的功能。
上面我們通過Ajax范例對智能方法的適配規(guī)則有了一些基本的了解,下面總結(jié)一下適配算法。 首先智能方法適配按照參數(shù)名進行適配:
如果按照上面的規(guī)則,toUpperCaseAction對應(yīng)的Ajax方法就必須為如下的形式:
@Expose
public String toUpperCase(String parameter) {
return "input:\n" + parameter + "\n\n" + "output:\n"
+ parameter.toUpperCase();
}
這種方式有時候可能并不滿足我們對業(yè)務(wù)方法的命名習(xí)慣,不利于Java代碼的閱讀。 按照參數(shù)類型進行適配 另外我們還可以根據(jù)參數(shù)的類型進行方法適配。即Dorado根據(jù)參數(shù)類型來確定每個參數(shù)的作用。它存在的問題是:當參數(shù)較為復(fù)雜時Dorado可能無法準確的判斷個參數(shù)的作用。 混合式的適配規(guī)則(尚未提供) 即現(xiàn)根據(jù)名稱規(guī)則進行一次適配,對于那些無法匹配的參數(shù)繼續(xù)嘗試通過類型規(guī)則進行適配。自動方法適配不會強行調(diào)用目標方法,當其認為適配可能存在歧義時會報錯而不會繼續(xù)執(zhí)行方法調(diào)用。 Map 對于Map類的參數(shù)自動方法適配會嘗試將其拆解,用其中的鍵值對與方法參數(shù)進行適配。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: