狠狠撸

狠狠撸Share a Scribd company logo
设计模式之惭痴颁基于奥别产主讲:贬别蝉别测
提纲What and Why优缺点实例分析举一反三
What is MVC?MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。目的:动态的程序设计简化后续修改和扩展复用代码专一化(模块、人员)
视图界面设计人员进行图形界面设计展示数据(不仅仅是显示)无业务逻辑
控制器负责转发请求,对请求进行处理不同层面间的组织作用控制应用程序的流程处理事件并作出响应
模型包含程序应有的功能(实现算法等)Bean/Service/DAO etc.封装数据与逻辑直接访问数据(DB)不依赖“视图”和“控制器”刷新机制
原始时代(JSP or Servlet)
原始时代(JSP or Servlet) Password.htm<HTML><BODY><form action="PasswordGen.jsp" method="POST"><H3>Welcome to the Password Generator</H3>First Name: <input type="text" name="firstName"><br>Last Name: <input type="text" name="lastName"><br><p><input type="submit" value="Generate Password"></form></BODY></HTML>
原始时代(JSP or Servlet)
原始时代(JSP or Servlet)PasswordGen.jsp<html><body><%  String firstName = request.getParameter("firstName");  String lastName = request. getParameter("lastName");  String password;if( (firstName.length()>=2) && (lastName.length()>=2))	password = lastName.substring(0,2)+firstName.substring(0,2);  else	password = "NoGo";%><h1>Password Generated!</h1>Your super secret password is <%= password %>.<br><a href="Password.htm">To generate another password.</a></body></html>
原始时代(JSP or Servlet)PasswordGen.jsp<html><body><%  String firstName = request.getParameter("firstName");  String lastName = request. getParameter("lastName");  String password;if( (firstName.length()>=2) && (lastName.length()>=2))	password = lastName.substring(0,2)+firstName.substring(0,2);  else	password = "NoGo";%><h1>Password Generated!</h1>Your super secret password is <%= password %>.<br><a href="Password.htm">To generate another password.</a></body></html>看着都费劲,别说修改了╮(╯_╰)╭
缺点职责多元HTML代码和Java代码混杂(好眼花⊙﹏⊙)修改逻辑or 修改呈现?代码复用?(审核身份、日志记录)团队开发困难
MVC
优点解耦职责单一分工明确(模块、人员)代码复用测试方便对比职责多元HTML代码和Java代码混杂(好眼花)修改逻辑 or 修改呈现?增加服务?代码复用?(审核身份、日志记录)团队开发困难
缺点比较抽象没有明确的定义,难以完全理解需要精心计划与设计,花费可观更多文件,更多代码,增加了复杂度这么复杂,为什么还要用?弥补:框架
Servlet and JSP
Servlet and JSP Password.htm<HTML><BODY><form action="/webapp/passwordservlet" method="POST"><H3>Welcome to the Password Generator</H3>First Name: <input type="text" name="firstName"><br>Last Name: <input type="text" name="lastName"><br><p><input type="submit" value="Generate Password"></form></BODY></HTML>
Servlet and JSP passwordServlet.javapublic void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception {GenBeangb = new GenBean();gb.setFirstName(request.getParameter("firstName"));gb.setLastName(request.getParameter("lastName"));gb.generate();request.setAttribute("gen", gb);RequestDispatcherrd = getServletContext().getRequestDispatcher("/PasswordGen.jsp");rd.forward(request, response);  }
Servlet and JSP GenBean.java public class GenBean {  private String firstName;  private String lastName;  private String password = "NoGo";  public String getFirstName(){ return firstName; }  public void setFirstName(String fn){ firstName = fn;}  public String getLastName(){ return lastName; }  public void setLastName(String ln){ lastName = ln; }  public String getPassword(){return password;}  public String generate() {    if( (firstName.length() >= 2) && (lastName.length() >= 2))      password = lastName.substring(0,2) + firstName.substring(0,2);    return password;  }}
Servlet and JSPPasswordGen.jsp<html><body><jsp:useBean id = "gen" class = “genpackage.GenBean" scope="request"/><h1>Password Generated!</h1>Your super secret password is <jsp:getProperty name="gen" property="password"/><br><a href="Password.htm">To generate another password.</a></body></html> 清晰了很多吧o(≧v≦)o~~
体现分发的Servlet控制器 verify.java public void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception {    String username = request.getParameter(“username"));     String password = request.getParameter(“password")); boolean valid = new Security().verify(username, password);RequestDispatcherrd= null;    if(valid) {rd= getServletContext().getRequestDispatcher("/valid.jsp");    }     else {rd= getServletContext().getRequestDispatcher("/invalid.jsp");    }rd.forward(request, response);  }
现在呈现和逻辑被分开了,真好呀Servlet 1JSP 1Servlet 2JSP 2Servlet 3JSP 3有没有改进的余地?
如果把Servlet组合起来?ControllerJSP 1Model 1JSP 2Model 2JSP 3Model 3关系是不是简单了许多?
Struts 2
ModelAction 1Action 2Action 3BeanDAOServiceStruts 2XML配置ControllerStruts 2Dispatcher浏览器Web容器ViewJSP 1JSP 2DataBase
web.xml    <filter> ????????<filter-name>struts2</filter-name> ????????<filter-class> ????????????org.apache.struts2.dispatcher.FilterDispatcher ????????</filter-class> ????</filter> ????<filter-mapping> ????????<filter-name>struts2</filter-name> ????????<url-pattern>/*</url-pattern> ????</filter-mapping>
Struts.xml<struts> 	<package name=“default” extends=“struts-default”>		<action name=“hello” class=“HelloWorld”>		<result name=“SUCCESS”>/HelloWorld.jsp		</result>		</action>			</package></struts>
HelloWorld.java(POJO)public class HelloWorld {	private String message;	public String execute() Exception {   		message = “Hello,world\n”;       	message += “The  time is:\n”;       	message += System.currentTimeMillis(); return “SUCCESS”;	}	public void setMessage(String message){this.message = message;	}	public String getMessage() {		return message;	}}
HelloWorld.jsp<%@ taglib prefix="s" uri="/struts-tags" %><html><head><title>Hello World!</title></head><body><h2><s:property value="message" /></h2></body></html>
举一反叁思考模式思想,套用模式不如不用模式解耦单一职责原则(厂搁笔)测试
谢谢!

More Related Content

Similar to 设计模式惭痴颁 (20)

厂迟谤耻迟蝉学习笔记
厂迟谤耻迟蝉学习笔记厂迟谤耻迟蝉学习笔记
厂迟谤耻迟蝉学习笔记
yiditushe
?
ASP.Net MVC2 介绍
ASP.Net MVC2 介绍ASP.Net MVC2 介绍
ASP.Net MVC2 介绍
Allen Lsy
?
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训
lotusprince
?
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
Wade Huang
?
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
Vlog02  [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...Vlog02  [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
SernHao TV
?
厂迟谤耻迟蝉快速学习指南
厂迟谤耻迟蝉快速学习指南厂迟谤耻迟蝉快速学习指南
厂迟谤耻迟蝉快速学习指南
yiditushe
?
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit TestingASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
江華 奚
?
ASP.NET MVC Code Templates實戰開發 -twMVC#4
 ASP.NET MVC Code Templates實戰開發 -twMVC#4 ASP.NET MVC Code Templates實戰開發 -twMVC#4
ASP.NET MVC Code Templates實戰開發 -twMVC#4
twMVC
?
twMVC#04 | ASP.NET MVC - Code Templates實戰開發
twMVC#04 | ASP.NET MVC - Code Templates實戰開發twMVC#04 | ASP.NET MVC - Code Templates實戰開發
twMVC#04 | ASP.NET MVC - Code Templates實戰開發
twMVC
?
闯诲辞苍贵谤补尘别飞辞谤办中文
闯诲辞苍贵谤补尘别飞辞谤办中文闯诲辞苍贵谤补尘别飞辞谤办中文
闯诲辞苍贵谤补尘别飞辞谤办中文
banq jdon
?
基于J2 Ee 的通用Web 信息系统框架设计与实现
基于J2 Ee 的通用Web 信息系统框架设计与实现基于J2 Ee 的通用Web 信息系统框架设计与实现
基于J2 Ee 的通用Web 信息系统框架设计与实现
yiditushe
?
前端惭痴颁之产补肠办产辞苍别
前端惭痴颁之产补肠办产辞苍别前端惭痴颁之产补肠办产辞苍别
前端惭痴颁之产补肠办产辞苍别
Jerry Xie
?
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展
江華 奚
?
Exam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsExam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development Fundamentals
Chieh Lin
?
TBAD F2E 2010 review
TBAD F2E 2010 reviewTBAD F2E 2010 review
TBAD F2E 2010 review
leneli
?
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練42015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
Duran Hsieh
?
ASP NET MVC
ASP NET MVC ASP NET MVC
ASP NET MVC
leeju lee
?
Backbone.js and MVW 101
Backbone.js and MVW 101Backbone.js and MVW 101
Backbone.js and MVW 101
Jollen Chen
?
厂迟谤耻迟蝉学习笔记
厂迟谤耻迟蝉学习笔记厂迟谤耻迟蝉学习笔记
厂迟谤耻迟蝉学习笔记
yiditushe
?
ASP.Net MVC2 介绍
ASP.Net MVC2 介绍ASP.Net MVC2 介绍
ASP.Net MVC2 介绍
Allen Lsy
?
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
Wade Huang
?
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
Vlog02  [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...Vlog02  [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
SernHao TV
?
厂迟谤耻迟蝉快速学习指南
厂迟谤耻迟蝉快速学习指南厂迟谤耻迟蝉快速学习指南
厂迟谤耻迟蝉快速学习指南
yiditushe
?
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit TestingASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
江華 奚
?
ASP.NET MVC Code Templates實戰開發 -twMVC#4
 ASP.NET MVC Code Templates實戰開發 -twMVC#4 ASP.NET MVC Code Templates實戰開發 -twMVC#4
ASP.NET MVC Code Templates實戰開發 -twMVC#4
twMVC
?
twMVC#04 | ASP.NET MVC - Code Templates實戰開發
twMVC#04 | ASP.NET MVC - Code Templates實戰開發twMVC#04 | ASP.NET MVC - Code Templates實戰開發
twMVC#04 | ASP.NET MVC - Code Templates實戰開發
twMVC
?
闯诲辞苍贵谤补尘别飞辞谤办中文
闯诲辞苍贵谤补尘别飞辞谤办中文闯诲辞苍贵谤补尘别飞辞谤办中文
闯诲辞苍贵谤补尘别飞辞谤办中文
banq jdon
?
基于J2 Ee 的通用Web 信息系统框架设计与实现
基于J2 Ee 的通用Web 信息系统框架设计与实现基于J2 Ee 的通用Web 信息系统框架设计与实现
基于J2 Ee 的通用Web 信息系统框架设计与实现
yiditushe
?
前端惭痴颁之产补肠办产辞苍别
前端惭痴颁之产补肠办产辞苍别前端惭痴颁之产补肠办产辞苍别
前端惭痴颁之产补肠办产辞苍别
Jerry Xie
?
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展
江華 奚
?
Exam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsExam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development Fundamentals
Chieh Lin
?
TBAD F2E 2010 review
TBAD F2E 2010 reviewTBAD F2E 2010 review
TBAD F2E 2010 review
leneli
?
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練42015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
Duran Hsieh
?
Backbone.js and MVW 101
Backbone.js and MVW 101Backbone.js and MVW 101
Backbone.js and MVW 101
Jollen Chen
?

设计模式惭痴颁