已經轉移到
好·色之徒--我的博客、我的生活在上一篇文章中談論了有關MVC中C的部分,這里開始說明如何搭建M的部分,這里的M,不當當是簡單的數據模型,更多的涉及到了業務邏輯的成分。
上一篇中的UctServlet類實現了控制,提到了用于控制流程的數據庫中有一個字段alink(值為HAAap),里面的內容就是現在要講解的部分。 從UctServlet,到交由具體某個類來實現業務邏輯,HAAap就是這樣一個類,不需要繼承特殊的框架體系,完全有自己開發。這里需要明確一點,為了整個應用體系的相對完整性,可以設計一個共通M類(比如這里的UctApSuper),主要負責一些共通的業務和資源。HAAap繼承于它。
結合UctServlet類的核心邏輯(可參考
不借助任何web框架結構,構建自己的MVC應用程序(1)部分),會通過反射機制首先調用某M類(HAAap)的apexec方法。所以對共通M類(UctApSuper)有這樣的設計:
public UctApSuper() {
DBA = new uct.UctDBIO(); //數據源設定
sUser = new uct.UctUser(); //UctUser
psApName = UctUser.getApName();
}
public void apexec(HttpServletRequest preq, HttpServletResponse pres,
HttpSession phtss) throws IOException, ServletException {
try {
this.req = preq;
this.res = pres;
this.uses = phtss;
uhData = this.getPVal(); // Window畫面所有的key-value值對,uhData是Hashtable
res.setContentType("text/html");
} catch (Throwable e) {
System.out.println("ApSuper.apexec Throwable = " + e);
this.errPage(req, res, psApName, "ApSuper.apexec :ERROR=" + e);
}
}
設置了一些共通需要的資源
除了上面的以外,在UctApSuper類中還有比如:apfCallJsp(成功后調用jsp資源)、errPage(失敗后調用錯誤資源)等等共通的處理,具體的實現方式以后源碼下載中會提供。
下面描述一下具體的M類(HAAap),它繼承于UctApSuper類,給出一些代碼片斷:
public class HAAap extends UctApSuper {
//定義一些畫面(通常一個M類會管理從List-input-confirm畫面的過程)
private String psListJSP = "HAA/H01010";
private String psInputJSP = "HAA/H01020";
private String psConfirmJSP = "HAA/H01030";
public HAAap() {
}
這里我再列出上一篇文章中提到的控制流程的數據表
alink atype window_id action_id
HAAap BEAN WIN_HGA HAA ----年度計劃畫面 初始的一種狀態
HAAap BEAN WIN_HGA SRDT ----SRDT表示年度計劃畫面上的檢索功能
HAAap BEAN WIN_HGA DTIL ----DTIL表示年度計劃畫面上的詳細畫面功能
/**
* 按照畫面url上的 ?Window=WINHGA&Action=HAA,來判斷應該進入那一邏輯部分
*/
public void apexec(HttpServletRequest preq, HttpServletResponse pres, HttpSession phtss) {
try {
//UctApSuper類的apexec方法,設置共通資源
super.apexec(preq, pres, phtss);
//取得參數Action值,以確認進入那一邏輯部分
sEventType = getPVal("Action");
apinit(); // 該M的一般初始化處理
//判斷進入那一邏輯部分
if (sEventType.equalsIgnoreCase("HAA")) {
apmInit(); // 初始畫面
} else if (sEventType.equalsIgnoreCase("RINS")) {
apmNew(); // 新增加畫面
} else if (sEventType.equalsIgnoreCase("DTIL")) {
apmDetails(); // 詳細畫面
} else {
this.apfFwkErr(sEventType);
}
//共通結束處理
apexit();
} catch (Exception e) {
errPage(req, res, "apexec", e); // ERROR
} finally {
}
}
下面依次是apinit();apmInit();apmNew(); ......等的具體處理內容,舉一例:
private void apmDetails() {
try {
...業務邏輯
apfCallJsp(psInputJSP); // 調用JSP資源
} catch (Exception e) {
errPage(req, res, "apmDetails", e); // ERROR
} finally {
}
}
}
這些就是M類的處理過程,代碼作了相應修改
不借助任何web框架結構,構建自己的MVC應用程序(3)??
有個論壇