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