1. 程式人生 > >使用XWAF框架(1)——Web專案的程式碼分層

使用XWAF框架(1)——Web專案的程式碼分層

  建議在Eclipse環境下使用XWAF框架來開發使用者的Web專案,並遵循以下步驟和約定。

1、獲取XWAF框架壓縮包檔案

  程式設計師點選下列地址免費下載XWAF框架的壓縮包檔案:XWAF框架壓縮檔案

2、安裝XWAF框架

  下載XWAF框架的壓縮包檔案後,其名稱格式類似於:com.xwaf_10.jar

  將該檔案放到使用者Web專案的子目錄“WEB-INF/lib/”中即完成了安裝。

3、XWAF框架的程式碼分層規範

     XWAF框架按照MVC的分層思想,要求使用者對程式碼合理分層,並通過簡單配置和註解融入

XWAF框架的程式碼管理體系。

  所謂MVC就是將專案的全部程式碼分為模型(Model)、檢視(View)和控制(Control)三大部分,每一部分的程式碼實現一定的功能。模型層程式碼負責資料訪問、資料傳遞和業務邏輯處理,檢視層程式碼實現資料展示和使用者互動,控制層程式碼接受客戶請求,組織和排程檢視層與模型層的程式碼協調工作,向客戶端做出響應。MVC的核心思想就是程式碼分層和邏輯控制。

XWAF框架和XWAG外掛遵循了MVC的程式碼分層與邏輯控制思想,但進行了細化,將MVC三大部分劃分成如下六層:

3.1  檢視層(View

  也稱為視圖表現層或使用者互動介面層(

UI),是展示資料和接受使用者輸入的地方,一般使用HTML頁面或JSP頁面實現。

      XWAF框架提供了JSP動態網頁模板庫和JavaScript函式庫(XJQL),支援使用者快速開發檢視檔案。

  如果使用XWAG外掛生成使用者的專案程式碼,將依據動態網頁模板、使用者的選單設定和資料庫繫結,以及XJQL函式建立首頁,同時自動生成“客戶註冊、完善註冊、登入、修改密碼”和“基礎資料維護”等JSP頁面。

  使用者專案中更為複雜的業務互動頁面,需要程式設計師自己設計和編碼完成,可以使用XWAG提供的CSS樣式和

XJQL中的函式。同時XWAG支援使用第三方動態網頁模板,生成具有特定功能的頁面。

3.2  控制層(Control

       XWAF框架提供了伺服器端訪問控制的兩個核心類:

  1com.xwaf.control.XwafDispatchServlet——請求響應排程器。這是一個遵循Servlet訪問規範的Servlet類,開發人員需要在web.xml檔案中,使用<servlet><servlet-mapping>配置項來註冊類路徑和對映地址,將特定的URL請求納入XWAF框架控制之下。

     2com.xwaf.control.XwafHandlerAndInterceptorAdapter——請求處理與攔截介面卡。XWAF框架自動掃描使用者專案的HttpHandlerWebSocketHandler處理器型別包,以及HttpInterceptorWebSocketInterceptor攔截器型別包,建立請求地址(URL)與處理器和攔截器的對映關係庫,提供動態匹配功能,供請求響應排程器呼叫。

       XWAG外掛還會自動生成DownloadServletDrawCodeServletExitLoginServletPageClosedServlet等幾個特殊功能的Servlet類檔案。分別控制下載檔案、繪製驗證碼、登出登入和客戶端關閉頁面等特殊請求的伺服器響應。

  專案開發人員也可以編寫ServletFilter過濾器,更加靈活地控制客戶訪問。過濾器程式碼將在Servlet類檔案之前被執行。

3.攔截層(HttpInterceptorWebSocketInterceptor

        XWAF支援面向切面的開發模式,這有利於程式設計師在不修改已有程式碼的前提下,擴充套件或插入新的功能。

        XWAF框架使用處理攔截器機制,實現切面開發。控制器在執行HttpHandler程式碼之前,會先執行攔截器的程式碼。比如:程式設計師可以將工作日誌程式碼全部寫在攔截器中,不必在HttpHandler類中考慮工作日誌,這樣會節省大量的日誌程式碼。

    XWAF框架支援HttpInterceptorWebSocketInterceptor兩種攔截器,XWAF約定:HttpInterceptor必須使用@HttpInterceptor註解標識,而WebSocketInterceptor必須使用@WebSocketInterceptor註解標識。攔截器類的處理方法,則必須使用@RequestMapping註解對映要攔截的URL地址。

  為了讓XWAF框架找到使用者的攔截器位置,必須在“XConfig/XwafConfig.xml”配置檔案的“<interceptorPackage></interceptorPackage>”節點中,註冊攔截器類所在的包名稱。如果有多個攔截器的包名稱,請使用英文“,”分隔包名。

3.請求處理層(HttpHandlerWebSocketHandler

   請求處理層是XWAF框架真正處理使用者請求的重要程式碼,是控制層的核心處理器。主要工作是提取來自客戶端的請求引數和資料,經過分析後,呼叫業務邏輯服務類的合適方法,實現相應的業務邏輯。並將結果返回給控制器,也可以直接響應客戶端(使用Response物件實現)。處理層的程式碼一般由開發人員編寫。

       XWAF支援HttpHandler和WebSocketHandler兩種處理類。XWAF約定:程式設計師自定義的HttpHandler類必須使用@HttpHandler註解標識,WebSocketHandler類必須使用@WebSocketHandler註解標識。一個處理方法對應一個客戶端請求地址(URL)。方法必須使用@RequestMapping註解對映匹配的請求地址。當Handler處理類的所有方法匹配的請求地址包含共同的地址字首字串時,可以給類新增@RequestMapping註解來標識這個字首,同時,在方法的@RequestMapping註解中去掉這個字首字串,達到優化程式碼的目的。

       XWAG外掛在生成使用者專案程式碼時,會自動生成基於單表的HttpHandler類,實現對單表的“增、刪、改、查”等操作,程式設計師可以參考。涉及複雜業務邏輯的HttpHandler處理類需要程式設計師自己編寫,並正確註解。

       XWAF框架提供了轉發WebSocket訊息和資料的預設處理類和方法,如果僅僅是轉發資料和訊息,不需要編寫任何處理類;如果要實現複雜的邏輯處理,就需要程式設計師按照規範自己編寫處理類和方法。為了規範程式設計師程式設計,XWAF定義了一個IWebSocketHandler介面,程式設計師可以實現它來完成自己的業務需求。

     XWAF框架約定:程式設計師編寫的HttpHandler和WebSocketHandler類可以放在同一個包中,並在框架配置檔案“XConfig/XwafConfig.xml”中,使用配置節點“<handlerPackage></handlerPackage>”設定處理類所在的包名稱。如果使用者專案有多個處理型別包,則使用英文“,”隔開它們。

       Web伺服器啟動專案時,XWAF框架會掃描註冊的包,將新增有@HttpHandler註解和@WebSocketHandler註解的類,及其新增有@RequestMapping註解的方法的資訊儲存到管理器中,以備匹配之用。

  過濾器、控制器、Http處理器和攔截器的執行順序如下:

  Servlet 過濾器(Filter>XWAF 控制器(XwafDispatchServlet>XWAF 攔截器(HttpInterceptor>XWAF 處理器(HttpHandler

3.5  業務邏輯服務層(Service

   業務邏輯服務層是真正處理使用者業務邏輯的主體類,應該由開發人員編寫,以實現各種各樣複雜的業務邏輯處理,並接受Handler類的呼叫。

  為了減輕程式設計師的工作量,如果使用XWAG外掛生成使用者專案程式碼,會自動生成了與各個資料表對應的業務邏輯服務類檔案,類檔案實現了IHttpXwafService介面提供對單個數據表進行“增、刪、改、查”等基本操作的方法,類檔案的命名規則是:資料表名稱(去掉字首字元)+ ”Service.java”

  如果使用者專案有更復雜的業務邏輯,可以優先考慮組合這些單表的服務類提供的方法,實現更為複雜的功能。

3.6  資料訪問層(DAO

      DAO類是實現資料庫訪問的基礎類,SQL語句和命令應該在DAO方法中組織,不應該放在Service服務層中。

  一般地,在Handler層中提取使用者提交的引數,轉化為DataField或其子類物件的集合後,傳遞給被呼叫的Service方法;Service方法再傳遞給被呼叫的DAO方法。DAO類的靜態方法依據這些來自使用者的引數,藉助XWAF框架的資料庫伺服器(DataServer)、資料訪問器(DataAccessor)和資料庫助手(DataBaseHelper)實現對資料庫的訪問和更新。如果有返回結果集,就以PageDataSet物件原路返回給Handler層。

      XWAG外掛為每一個數據表建立一個DAO檔案,命名規則是:資料表名稱(去掉字首字元)+ ”DAO.java”,提供對每個資料表的“增、刪、改、查”靜態方法。也就是說,在XWAF框架中,XWAG外掛生成的DAO檔案實現了對真實資料表的個性化操作。同時,外掛還會為每一個數據表自動建立了“儲存過程、觸發器、函式、序列等資料庫物件,以提高資料訪問的效能。

      XWAF框架主張使用DataField資料欄位、Record記錄和PageDataSet分頁資料集物件在不同層次之間傳遞資料。PageDataSet包含Record物件的Map集合,Record包含DataField物件的List集合。只有DataField物件與資料表的原始欄位結構有關聯,記錄和分頁資料集物件都是大小可伸縮的集合,可以隨實際引數的個數或結果集的變化而變化。返回結果集PageDataSet與實體類沒有關係,因此不需要再考慮查詢結果集與實體類的欄位不匹配的問題。

  為了給開發者提供更多的選擇和便利,使用Eclipse外掛XWAG生成專案程式碼時,還是會自動生成與各個資料表對應的實體類,開發人員也可以選作傳遞資料之用,但框架不建議這樣做。因為實體類在Web專案中傳遞客戶的請求資料不夠靈活,在輸出查詢結果集時,又難以滿足只輸出部分欄位值的特殊情況,還需要額外的資料實體對映程式設計。