99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

智能方法適配

2024-03-07 18:37 更新

在實做Ajax的范例中,我們注意到Ajax.java中的代碼中沒有任何dorado的開發(fā)約定,它的樣子和我們業(yè)務層的代碼沒有什么差別:

@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)于配置"的設計思路而提供。這樣在很多情況下我們不需要方法具有Dorado特性,也不需要引入Dorado的開發(fā)規(guī)范。由Dorado自動判斷這個方法中的各個參數以及返回值的用途。這是一種職能化的處理邏輯。這帶給我們的好處:

  • 幾乎不需要引入任何Dorado的API。
  • 按照業(yè)務的需要而不是Dorado的需要來為表現層編寫代碼。
  • 可以令Dorado與后臺業(yè)務邏輯之間的粘合層代碼更加簡潔、易讀。

如Ajax范例中的toUpperCase,Browser向服務器端傳遞的參數是我們在action的parameter屬性中定義的,因為傳過來的是一個字符串,智能方法在適配的時候會發(fā)現toUpperCase方法的參數就是一個字符串類型的,這樣它就自動認為你想調用的方法就是toUpperCase,并將parameter中的值作為str中的值傳入。這個方法調用結束之后返回了一個字符串給外界,而ajax調用就自動的將這個返回值作為ajax調用的返回值,如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參數,讓后對ajax這個bean進行方法匹配,會發(fā)現其中沒有完全匹配的,這個時候職能方法適配會將parameters中的參數拆開為num1,num2,這樣就可以發(fā)現存在對應的multiply方法,并進行調用。并將結果作為ajax調用的結果返回到前臺:

action.set("parameter", parameter).execute(function(result) {
    dorado.MessageBox.alert(nums[0] + " * " + nums[1] + " = " + result);
});

我們直接將這個result顯示出來。multiply范例體現的是智能方法適配過程中map自動拆解的功能。

適配算法

上面我們通過Ajax范例對智能方法的適配規(guī)則有了一些基本的了解,下面總結一下適配算法。 首先智能方法適配按照參數名進行適配:

  • 即Dorado根據參數名來確定每個參數的作用。
  • 相對嚴謹的適配規(guī)則,但有時使不夠業(yè)務化。例如對于AjaxAction的后端方法,其參數名必須為parameter。

如果按照上面的規(guī)則,toUpperCaseAction對應的Ajax方法就必須為如下的形式:

@Expose
public String toUpperCase(String parameter) {
    return "input:\n" + parameter + "\n\n" + "output:\n"
            + parameter.toUpperCase();
}

這種方式有時候可能并不滿足我們對業(yè)務方法的命名習慣,不利于Java代碼的閱讀。 按照參數類型進行適配 另外我們還可以根據參數的類型進行方法適配。即Dorado根據參數類型來確定每個參數的作用。它存在的問題是:當參數較為復雜時Dorado可能無法準確的判斷個參數的作用。 混合式的適配規(guī)則(尚未提供) 即現根據名稱規(guī)則進行一次適配,對于那些無法匹配的參數繼續(xù)嘗試通過類型規(guī)則進行適配。自動方法適配不會強行調用目標方法,當其認為適配可能存在歧義時會報錯而不會繼續(xù)執(zhí)行方法調用。 Map 對于Map類的參數自動方法適配會嘗試將其拆解,用其中的鍵值對與方法參數進行適配。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號