Model1和Model2是java web的兩種架構模式。這兩種模式各有優缺點,都有各自適合使用的場景。
Model1
首先,從分層的角度說,Model1模式可以看作是由兩層組成:視圖層和模型層。


~~~
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%@ page import="com.bjpowermode.drp.sysmgr.*"%>
<%@ page import="com.bjpowermode.drp.domain.*"%>
<%
//取得參數
String command=request.getParameter("command");
String userId=request.getParameter("userId");
//調用業務邏輯中的查詢用戶代碼是否存在的方法
User user=UserManager.getInstance().findUserById(userId);
//點擊修改
if("modify".equals(command)){
//User user=new User();
user.setUserId(request.getParameter("userId"));
user.setUserName(request.getParameter("userName"));
user.setPassword(request.getParameter("password"));
user.setContactTel(request.getParameter("contactTel"));
user.setEmail(request.getParameter("email"));
//調用業務邏輯中的修改用戶的方法
UserManager.getInstance().modifyUser(user);
System.out.println("修改成功");
}
%>
~~~
可以看出,model1是以jsp為中心的,在jsp頁面調用了很多業務邏輯的方法。在例子中,我們選擇一個用戶,點擊修改,就將數據提交到了jsp對象中。然后在jsp去調修改用戶的方法,執行數據庫操作,最后返回結果。這種模式讓我想起了在沒有用三層之前,
Model2


~~~
/**
* 修改物料Servlet
* @author Administrator
*
*/
public class ModifyItemServlet extends AbstractItemServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//構造表單數據
String itemNo=request.getParameter("itemNo");
String itemName=request.getParameter("itemName");
String spec=request.getParameter("spec");
String pattern=request.getParameter("pattern");
String category=request.getParameter("category");
String unit=request.getParameter("unit");
//構造Item對象
Item item=new Item();
item.setItemNo(itemNo);
item.setItemName(itemName);
item.setSpec(spec);
item.setPattern(pattern);
//構造物料類別
ItemCategory itemCategory=new ItemCategory();
itemCategory.setId(category);
item.setItemCategory(itemCategory);
//構造物料單位
ItemUnit itemUnit=new ItemUnit();
itemUnit.setId(unit);
item.setItemUnit(itemUnit);
//調用后臺業務邏輯
itemManager.modifyItem(item);
response.sendRedirect(request.getContextPath()+"/servlet/item/SearchItemServlet");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
}
~~~
在例子中,我們在客戶端請求修改的命令到servlet,把調用業務邏輯的方法放在ModifyItemServlet中。
小結:
Model1結構簡單,容易上手,適合一些小型的項目。但也正是由于他的這個優點,也帶來了很大的弊端。他把業務邏輯和表現都雜糅到了一起,使得耦合度大大增加,給維護帶來了很大的困難。尤其是在大型的項目中,這點就尤為突出了。Model2彌補了Model1 的缺點,在大型項目開發中,可以更好的做到多人協作開發,互不影響。