什麼是Design Patten?
簡單來說
一個Design Patten描述了一個被證實可行的方案
a
如果開發一個企業級應用
b
Model
§ 所有的企業數據以及商業邏輯可以作為模式
§ 視圖可以通過模式訪問數據
§ 控制器用來結合模式和視圖
根據以上的邏輯
§ 應用的商業邏輯由MVC中的模式也就是EJB來表現
§ 多個頁面組成了MVC中的視圖
§ 控制器是一系列接收用戶動作的對象
c
§ MVC結構適用於那些多用戶的
§ MVC可以很好的表達用戶的交互和系統模式
§ 很方便的用多個視圖來顯示多套數據
§ 代碼重復達到最低
§ 由於分離了模式中的流控制和數據表現
a
MVC給出了一個整個應用的松散的耦合架構
§ 當一個頁面移動後
§ 當有一系列頁面需要口令保護時
§ 當一個頁面需要一個新的表示層時
當這個系統變得復雜時
b
前台控制模式可以解決這個問題
c
§ 這個模式對於需要在多個含有動態數據的頁面之間進行復雜導航的系統來說
§ 這個模式對於要在所有頁面中都包含模板
§ 由於視圖的選擇集中在前端控制器上
§ 視圖重用和變更會更加容易
§ 視圖之間的復雜交互
§ 實現應用要求的安全性檢驗變得很簡單
§ 這個模式不適合小型的
d
§ RequestMappings
useRequestHandler=
requiresSecurityCheck=
com
以上這個文件是控制器的指定配置
§ FrontControllerImpl
// all required imports
// exceptions to be caught appropriately wherever applicable
public class FrontControllerImpl extends HttpServlet {
// all required declarations
private HashMap requestMappings;
public void init() {
// load the mappings from XML file into the hashmap
public void doPost(HttpServletRequest request
HttpServletResponse response)
throws IOException
{
doGet(request
}
public void doGet(HttpServletRequest request
throws IOException
String currentPage= request
// get all mapping info for
// if
// if
// forward the results to the given
}
}
用這種方法實現的控制器將很容易維護
a
前台控制給出了一個基於MVC的
另外一個常見的問題是
一般來說
當然
A servlet that does the workflow required for placing an order
// all required imports;
// exceptions to be caught appropriately wherever applicable;
// This servlet assumes that for placing an order the account and
// credit status of the customer has to be checked before getting the
// approval and committing the order
// represent the business logic of account
// not listed
public class OrderHandlingServlet extends HttpServlet {
// all required declarations
public void init() {
// all inits required done here
}
public void doPost(HttpServletRequest request
throws IOException
// other logic as required
// Get reference to the required EJBs
InitialContext ctxt = new InitialContext();
Object obj = ctxt
UserAccountHome acctHome = (UserAccountHome)
PortableRemoteObject
UserAccount acct = acctHome
obj = ctxt
CreditCheckHome creditCheckHome = (CreditCheckHome)
PortableRemoteObject
CreditCheck credit = creditCheckHome
obj = ctxt
ApprovalsHome apprHome = (ApprovalsHome)
PortableRemoteObject
Approvals appr = apprHome
obj = ctxt
CommitOrderHome orderHome = (CommitOrderHome)
PortableRemoteObject
CommitOrder order = orderHome
// Acquire the customer ID and order details;
// Now do the required workflow to place the order
int resul
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27475.html