天天看點

cdoframework系列介紹4:通用事務調用接口

 cdoframework的官方網站:http://www.cdoframework.com

  一個業務對象的事務調用接口,目前通行的做法是為每一個事務定義一個特定的方法,如果一個對象實作了多個事務,則會定義出多個方法。下面的例子說明了這一點:

public interface EmployeeManager { int addEmployee(Employee emp); int modifyEmployee(Employee emp); int deleteEmployee(String employeeId); }

  CDO開發架構認為,事務執行的本質是資料交換。一個事務(或者一個方法)的執行過程,其實是輸入請求資料,輸出應答資料的過程。同時,我們還要知道事務的執行成功與否。此外,事務行為,即方法名,CDO應用開發架構也視其為請求資料的一部分,這樣,任何一個事務,都可以統一為包含請求資料,應答資料和執行結果的執行過程,可定義為:

  Return handleTrans(CDO cdoRequest,CDO cdoResponse)

  完整的事務對象的接口定義如下:

public interface ITransService { Return init(); void destroy(); Return handleTrans(CDO cdoRequest,CDO cdoResponse); }

  在handleTrans方法中,cdoRequest表示請求資料,cdoResponse表示應答資料,Return代表執行結果。

  通用事務調用接口的一個顯而易見的好處是,我們無需為不同的業務對象定義不同的接口(不用再編寫接口定義檔案了),事務方法的變更不會影響接口定義。

更為重要的是,由于所有業務對象的事務接口統一了,我們就可以以一種通用的方式實作各事務的業務邏輯。通過可以提供一個服務總線對象,把事務對象轉換成和該服務總線對象相連接配接的一個服務對象。每個服務對象之間的調用不再通過互相引用達成,而是各自僅僅和總線對象相關,各服務對象之間将完全沒有代碼上的耦合,一個服務對象對另一個服務對象的調用,完全是透明地通過服務總線對象進行的。下圖的黃色部分即代表服務總線。

cdoframework系列介紹4:通用事務調用接口

2.利用handleTrans實作通用事務調用接口

  像上面的EmployeeManager接口的三個方法,可以統一用handleTrans來代替。其中:

  1) cdoRequest為請求對象,儲存事務的請求參數等資訊。請求對象中通過strServiceName和strTransName組合作為Key區分不同的事務,其值為對應的事務名,比如下面的代碼填充了一個請求對象:

cdoRequest.setStringValue(“strServiceName”,” EmployeeService”); cdoRequest.setStringValue(“strTransName”,”addEmployee”); cdoRequest.setStringValue(“strName”,”張三”); cdoRequest.setIntegerValue(“nAge”,20); //…

  2) cdoResponse為應答對象,儲存事務執行的輸出,如果沒有輸出,可以不填充;

  3) Return為傳回對象,儲存事務的執行結果

  在handleTrans内部,再根據strServiceName和strTransName的值,執行對應的某個具體方法。如果某個事務是handleTrans所不應該處理的,則handleTrans傳回null,以表示未對該事務進行處理。

  這種方式在統一了方法定義的同時,還利用CDO對象的優勢,避免了開發諸如Employee這樣的資料類。