第四章UML建模与MVC模式一体化开发过程ppt课件.ppt

上传人:小飞机 文档编号:1356586 上传时间:2022-11-13 格式:PPT 页数:54 大小:2.12MB
返回 下载 相关 举报
第四章UML建模与MVC模式一体化开发过程ppt课件.ppt_第1页
第1页 / 共54页
第四章UML建模与MVC模式一体化开发过程ppt课件.ppt_第2页
第2页 / 共54页
第四章UML建模与MVC模式一体化开发过程ppt课件.ppt_第3页
第3页 / 共54页
第四章UML建模与MVC模式一体化开发过程ppt课件.ppt_第4页
第4页 / 共54页
第四章UML建模与MVC模式一体化开发过程ppt课件.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《第四章UML建模与MVC模式一体化开发过程ppt课件.ppt》由会员分享,可在线阅读,更多相关《第四章UML建模与MVC模式一体化开发过程ppt课件.ppt(54页珍藏版)》请在三一办公上搜索。

1、4.基于MVC的一体化开发过程,中心任务:从UML建模开始一直遵循MVC模式直到完成详细设计。基本思想:1.通过每个用例按VM找出每个执行链;2.将每个VM执行链进行映射(路由配置)得到控制器C;3.从OOA到OOD逐步细化;,4.基于MVC的一体化开发过程,遵循MVC模式逐步细化过程模型。下图中: V=Viewer;R=RelationBF=BusyFlow;BM= BusyModel;DA= DataAccess;DO=DataObject;C=Controller;,Case,人机交互Viewer,业务逻辑Model,数据实体DataEntity,分析建模,用例图,划分类,结构设计,V,

2、BF,BM,DA,DO,R,控制器,C,详细设计,业务层,数据映射层,控制层,客户层,资源层,?,视图原型表单校验,映射链表,算法分析,Hibernate配置,DBMS物理设计,DBMS关系设计,OOA,OOD,4.基于MVC的一体化开发过程,1.UML用例图描述用户需求(OOA模型)2.系统MVC结构设计(OOD模型)3.Struts实现,4.1 UML用例图描述用户需求(OOA模型),OOA过程是:问题域分析;发现和定义类;识别对象的外部联系;建立系统的静态模型(功能模型、对象模型)与动态模型。这里按进程分OOA模型是:1. 业务建模(业务模型/功能需求模型/用例模型) 是对领域问题的分析

3、与抽象描述,主要面向用户,反映用户需求。 主要使用: 用例图(Actor+Use Case)业务场景描述(活动图,时序图,文字说明)2. 概念模型(类结构模型/类模型) 是业务模型向计算机表示的过渡,面向设计人员。 主要使用 :类图:表达类类的划分与封装;类间的静态关系与结构;时序图或协作图:对象间的消息传递(动态);对于实时系统还要有状态图;,4.1 UML用例图描述用户需求(OOA模型),储蓄业务系统总体用例图(根据用户需求描述) 总体用例反映系统的总体结构;每个用例相当于子系统;引导前台界面结构及软件结构设计。,4.1 UML用例图描述用户需求(OOA模型),展开各用例表达用户需求(得到

4、功能需求),以储户提取存款(取款)为例。1)用户需求(在SRS中文字描述): 用户手工填写用户名及提取金额,由操作员输入用户名和金额,系统进行身份验证和余额验证,两个条件通过执行提取现金操作,否则提示错误信息。2) “取款”用例图:,取款,Officer,4.1 UML用例图描述用户需求(OOA模型),3)用例脚本:1 目标:储户提取现金。2 事件流:基本流程用户输入身份号和提取金额;身份验证;余额验证,余额是否大于提取金额;提取现金,修改余额;显示帐户提款后的信息;可选流程身份号验证不通过,提示并重新输入;余额不足提示并重新输入; 3 特殊需求:无。4 前提条件:用例开始之前,操作员必须在系

5、统登录成功。5 后置条件:如果用例执行成功,用户余额被更新,否则,系统状态不变。,用表格方式表达的用例脚本:,用活动图表示事件流,4.1 UML用例图描述用户需求(OOA模型),4)从用例图按MVC找三种类视图类:drawingForm业务类:drawing_operation(C+M)实体类:Account,4.1 UML用例图描述用户需求(OOA模型),5)画交互图(用例对象时序图),4.1 UML用例图描述用户需求(OOA模型),6)对象的封装 行为:通过对象交互图,表达对象之间的消息传递,找出对象封装的行为; 属性:对象的属性根据具体类比较容易确定;具体如下。,6)找对象的属性和行为,

6、表单drawingForm具有表单输入文本框,提供身份id和金额amount;具有提交、复位按钮;显示提示信息;显示储户取款操作后的余额信息 ;,6)找对象的属性和行为,实体Account的属性有:id,name,balance,涉及到的存储过程转移到应用程序,drawing_operation中,因此实体类只封装属性;注:考虑移植和维护性,比如使用SQL Server2000、Oracle、MySQL等多种数据库,不提倡使用存储过程,实体的数据访问放在应用程序中。,6)找对象的属性和行为,drawing_operation主要是业务方法,通过对象时序图确定:响应Http请求,获取前台表单数据

7、;连接数据资源;验证用户身份验证储户余额;更新储户余额;导航到下个显示更新储户信息的页面,7)类的外部关系(后处理),1. 将所有的用例处理完后得到领域问题中所有的类(视图、实体、业务),再进行归纳合并,分类列出表格;(1)视图类:,7)类的外部关系(后处理),(2)业务类:,7)类的外部关系(后处理),(3)实体类:,7)类的外部关系(后处理),2 . 用类关系图表达类的外部关系; 类关系图在分析模型(OOA)可省略,类关系图在下一步的结构设计中是必需的。尤其方便的是可以利用设计工具进行正反向工程;3. 对于实体可以采用类关系图集中表示实体关系,可以取代ER图。ER图在关系数据库的设计中(总

8、体设计)中进行。 OOA模型至此基本完成,满足需求分析的三个基本模型:功能模型数据模型行为模型,4.2 基于MVC的设计(OOD模型),1.体系结构设计2.领域问题软件结构设计3.详细设计,4.2.1 体系结构设计,体系结构概念 什么是体系结构?为什么先进行体系结构设计?体系结构设计有哪些?设计内容 确定结构: Web结构,瘦客户(桌面图形图像网络分布式数据处理工作流流媒体 P2P B2B B2C); 选择架构:J2EE企业架构(.NET开源商用 SCA SOA); 分层结构:6层; 设计模式:MVC设计模式,Model2(JSP+Servlet+JavaBean),客户层,业务流程控制,业务

9、模型,数据访问,实体对象,数据资源,客户层,业务层,数据层,持久化层DAO,View,Control,Model,资源层,4.2.1 体系结构设计,系统环境配置,4.2.2 领域问题软件结构设计,体系结构设计决定领域问题结构设计的走向。领域问题结构设计是在体系框架内对OOA模型的细化。上面按J2EE的Web六层结构遵循MVC模式2这样一个体系结构就确定了每层的组件。如下图:设计内容总体结构:采用层次图描述系统功能结构;模块设计:逻辑层(Model)每个模块内部封装及外部关系;界面设计:客户层(View)每个界面封装内容及目录组织与导航;Web版型类关系图:用类图反映每个VM执行链;控制器设计:

10、设计VM路由表数据设计:针对DBMS的数据库逻辑设计,业务层Sevlet组件,客户层JSP组件,业务模型JavaBean,数据访问JavaBean,实体对象JavaBean,View,Model,4.2.2 领域问题软件结构设计,对于总体结构与数据设计另行讲解,主要讨论V与M的封装。指导思想: 对OOA模型中确定的每个用例分别处理(按链处理),然后按MVC和E四大部分归类组织。步骤:画出按分层结构进行细化的对象时序图;对V层对象可以用原型法设计界面效果;对M层,从对象时序图的消息传递找到对象封装的行为;对持久对象和表单值对象封装属性和get/set方法;画出单个链的Web版型的类外部关系图;画

11、出总的V层界面组织、M层类图、实体对象的外部关系。有利于负责网页制作、负责Java、负责数据库各方面开发人员的分工合作 ;设计控制器,即设计V M执行链的路由表;实体数据结构和ER图(也可由关系数据库设计师完成);借助正向工程工具生成代码框架;,1、对OOA模型按分层结构进行细化的时序图,从时序图再细细品味分层与MVC:V: JSP人机交互;C: Servlet执行业务流程和页面导航;M:JavaBean;业务模型:提供流程所用的方法(Object);数据访问:封装JDBC底层API;持久对象:Account没有使用?表单值对象:AccountForm何用?,2、客户层(人机界面),界面结构设

12、计可以采用原型法描绘:先按链考虑单独界面实现的要求,如登录、取款、存款等界面;再考虑整个系统界面结构:版面布局、栏目安排、菜单层次; Web界面统一风格的要求:字体、颜色、边距、高度、宽度、背景图像、定位等方面将在详细设计中(CSS样式表)完成。表单输入drawing.jsp,原形如下图:更新信息显示show.jsp,原形如下图:,2、客户层(人机界面),提示信息显示采用message dialog ,Id号不正确与余额不足的信息框原形如右侧两图:,视图表单值对象,表单值对象AccountForm.java,相当JSP中使用的JavaBean,用于表单参数传递。格式为VO(Value Obje

13、ct),注意与持久化对象PO(Persistence Object)格式相同,但两者恰恰作用在分层结构的两个极端。,3、控制层Draw_Servlet.java,采用Sevlet组件。执行业务流程,封装doPost方法 public void doPost(HttpServletRequest request, HttpServletResponse response)响应Http请求,获取前台表单数据,用内置对象request; id=request.getParameter(“id); amount=request.getParameter(“amount); 引用AccountForm对

14、象方法setUserid(String userid) 和setAmount(float amount); 连接数据资源,获得Connection对象; 验证用户身份,引用业务模型Busy_Object里的方法get_id_same(AccountForm),返回布尔值; 身份验证通过,验证储户余额,引用业务模型Busy_Object里的方法get_balance_diff(AccountForm),返回balance-amount差值; 余额满足,提取现金,调用业务模型Busy_Object里的方法save_draw(AccountForm); 设定 传入下个页面的request.setAt

15、tribut();用组件方法forward(),导航到下个显示更新储户信息的页面,4、业务模型Busy_Object.java,封装业务流程所用到的所有方法。每个方法涉及到的数据底层访问依赖下一层数据访问对象Data_access :定义数据访问对象:Data_access public void getConnection() 引用Data_access的getConnection() public boolean get_id_same(AccountForm)定义SQL查询语句;引用Data_access的executeQuery(String sql)方法,返回结果集ResultSet

16、;比较ResultSet .id与AccountForm.id,相等返回true否则false; public float get_balance_diff(AccountForm)返回ResultSet .balance与AccountForm.amount的差值; public void save_draw(AccountForm)定义SQL更新语句;引用Data_access的executeUpdate(String sql)方法,更新储户余额; ,5、数据访问模型Data_access.java,应用JDBC组件封装对数据资源的底层访问。 获得数据连接对象public void get

17、Connection() Class.forName(Driver)查找数据库驱动程序 DriverManager.getConnection(资源定位URL); public ResultSet executeQuery(String sql) 创建语句对象createStatement(); 执行查询语句executeQuery(sql); 返回结果集 ResultSet; public void executeUpdate(String sql) 创建语句对象createStatement(); 执行更新语句executeUpdate(sql);,6、实体对象account.java,实

18、体对象(PO)主要是封装数据库表,用于OR映射。实体Bean与值对象(VO)格式同。封装属性:String userid;String username;float amount;封装set/get方法 public void setUserid(String userid) public String getUserid() public void setUsername( String username) public String getUsername() public void setBalance(float amount) public float getBalancet(),取

19、款用例的类关系图,Web版型的类关系图。类关系图可以用正向工程生成代码框架,代码也可用反向工程生成类图;,4.2.3 详细设计,详细设计到底做什么?对模块内部封装的方法进行算法分析和设计;内部信息进行数据结构设计;对数据库进行物理设计,即确定数据库的物理结构;界面设计: 根据总体设计的原型,设计输入界面的数据格式或校验规则,输出界面的数据显示内容、格式;根据结构设计版面布局、栏目安排、菜单层次和字体、颜色等风格的要求,设计CSS样式表,详细到什么程度?用某种描述工具将每个模块处理过程的详细算法描述出来。任何程序员据此编程具有一致的可读性。如变量名、过程名。怎么描述? 伪代码PDL (Progr

20、am Design Language)、流程图、NS盒图、PAD图(Problem Analysis Diagram)、判定表、判定树 。 提倡用PAD图。如何进行? 根据依赖关系按分层结构由底向上进行,流程图与伪代码计算1+2+100算法,流程图:,伪代码:BEGIN S 0; I 1; while (I 100) do S S + I; I I + 1; print S;END,流程图与NS图比较,流程图符号,N-S盒图的基本符号,PAD图,用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码更容易。,1.持久对象account.java,私有属性:String userid; S

21、tring username; float balance;公有方法:3个Set,3个get方法;,2.数据访问模型Data_access.java,实例变量:数据源连接对象 Connection conn=null; 类 变 量:无 公有方法:3个,详见内部逻辑设计。,2.数据访问模型Data_access.java,. 建立数据源连接对象 public Void getConnection() 入口参数:无; 出口参数:无; 执行结果:实例变量conn创建连接数据源对象, conn其它方法共用;异常提示错误信息;,Void getConnection()流程图,2.数据访问模型Data_a

22、ccess.java,查询方法ResultSet executeQuery(String sql) 入口参数:SQL语句,由上一级调用时根据业务逻辑传进具体的SQL语句; 出口参数:查询结果集; 执行结果:正常返回结果集,异常进行错误提示;,ResultSet executeQuery(String sql)流程图,2.数据访问模型Data_access.java,更新方法void executeUpdate(String sql) 入口参数:SQL语句,由上一级调用时根据业务逻辑传进具体的SQL语句; 出口参数:无; 执行结果:正常执行无提示,异常进行错误提示;,void executeUp

23、date(String sql),3.业务逻辑模型Busy_Object.java,实例变量:数据访问对象Access_obj :Data_access , 数据集对象rs :ResultSet ; 类 变 量:无; 公有方法:4个;详见内部逻辑设计。,3.业务逻辑模型Busy_Object.java,. 建立数据源连接对象 public Void getConnection() 入口参数:无; 出口参数:无; 依赖对象: Access_obj :Data_access 执行结果: 引用依赖对象Access_obj 的方法getConnection()创建连接数据 源对象;此处的getConn

24、ection()起代理作用;,void getConnection()流程图,3.业务逻辑模型Busy_Object.java,身份验证方法 public boolean get_id_same ( AccountForm Customer)入口参数:客户表单值对象Customer:AccountForm ,对象值是前台表单输入的id和amount值;出口参数:身份验证结果布尔值;依赖对象: Access_obj:Data_access和 Customer: AccountForm执行结果:身份验证通过返回true,否则返回false;,get_id_same ()流程图,是,否,3.业务逻辑

25、模型Busy_Object.java,余额验证 public float get_balance_diff (AccountForm Customer)入口参数:表单值对象Customer :AccountForm : ,对象值是前台表单输入的id和amount值;出口参数:原余额取款额差;依赖对象: Access_obj:Data_access和 Customer: AccountForm执行结果:返回balance-amount差值;,get_balance_diff ()流程图,3.业务逻辑模型Busy_Object.java,更新帐户余额 public void save_draw(A

26、ccountForm Customer)入口参数:客户对象Customer: AccountForm ,对象值是前台表单输入的id和amount值;出口参数:无;依赖对象: Access_obj:Data_access和 Customer: AccountForm执行结果:更新该帐户的余额;,void save_draw()流程图,4.业务流程及控制Draw_Servlet.java,继承父类:Servlet组件HttpServlet; 实例变量:无: 类 变 量:无; 公有方法:1个doPost();详见内部逻辑设计。,4.业务流程及控制Draw_Servlet.java,Servlet组件

27、方法: public void doPost(HttpServletRequest request, HttpServletResponse response) 入口参数:内置对象request和response出口参数:无;依赖对象: Access_obj:Data_access和 Customer: AccountForm局部变量:id_is: boolean,存放身份验证结果; x: float,存放余额提取额差值;Customer: AccountForm ,客户值对象;BO:Busy_Object,业务模型对象;执行结果:执行业务流程,正常更新该帐户的余额,错误提示信息 。,4.业务

28、流程及控制Draw_Servlet.java,doPost()内部逻辑,5.界面详细设计,drawing.jsp 封装表单: 提交方式:Post; 输入条目:用户id号,8位全数字; 提取金额,浮点数; 其它控件:提交按钮,复位按钮; 方 法:Script表单验证function validate() Show.jsp显示储户新余额 声明变量:String username=; String x=; 获取参数:username=(String) request.getAttribute(username); x=(String)request.getAttribute(x); 显示数据:显示储

29、户username和新的余额x; 超连接: 返回主操作页面drawing.jsp;信息框 采用脚本javascript的alert()方法; 建立输出文本打印流PrintWriter out = response.getWriter(); 打印流输出脚本到客户机,基本格式如下 : out.print( alert(你的ID码不对!请重新输入); history.go(-1);,一体化开发过程总结,阶段过渡平滑,一气呵成;从用例开始已经进行了模块分解;每个用例就是从VM 的一个执行链,C执行业务流程和页面导航;面向MVC的一体化开发过程就是突破以往的方法,按着每个用例的执行链进行,规律性强、易掌

30、握;软件结构按6层结构划分,既做到了代码的解耦,也与MVC模式和执行链完美统一;各执行链设计完成后,找出一些重用的对象后重新封装;如每条链都用到的DAO部分;如果采用Model2,可以仿照 Struts结构,采用一个Servlet,然后用过滤器来配置各条执行链;,一体化开发过程总结,如果采用Struts框架,用struts-config.xml来装配每条链的映射关系,业务流程放在Action里。分层结构见下图:,客户层,映射控制ActionServlet,业务模型,数据访问,实体对象,数据资源,客户层,业务层,数据层,数据持久化层DAO,View,Control,Model,struts-config.xml,业务流程,控制层,资源层,数据持久层框架Hibernate,业务模型,数据访问(访问实体对象),实体对象(内存),数据资源,资源层,容器根据配置文件hibernate.cfg.xml提供SessionFactory对象,Session对象提供对实体对象的save/update/load/find等面向对象方法,容器根据映射文件管理OR间映射如Account.hbm.xml可以直接使用set/get,对象操作(内存),Tmit()同步对象与记录,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号