基于mvc的客户管理子系统的设计与实现文档格式.docx
《基于mvc的客户管理子系统的设计与实现文档格式.docx》由会员分享,可在线阅读,更多相关《基于mvc的客户管理子系统的设计与实现文档格式.docx(44页珍藏版)》请在冰豆网上搜索。
(2)以MVC模型为设计思想,运用Struts框架来实现信用卡管理系统的开发设计。
本文采用当前比较流行和便捷的B/S模式开发模式,采用Struts框架来实现系统表现层与业务层的分离,更加有利于系统的开发与维护。
进一步在系统的业务实现层和数据库之间加入了数据持久层,使得系统对数据库的访问实现面向对象的设计。
简单介绍了数据持久化技术以及本文实现数据库持久层的工具Hibernate持久化框架。
(3)对信用卡系统进行总体的分析,对信用卡管理中主要业务进行了分析,并进一步确定了系统的技术构架。
以客户管理子模块为例,说明系统开发设计的流程和具体的业务实现。
介绍了贯穿表现层、业务层、持久层的Spring框架,作为一个依赖注入的容器,对Struts与Hibernate实施监控的同时,且可以做安全、日志工作。
1.4论文结构
本文主要研究在J2EE平台下基于MVC设计模式开发信用卡管理软件WEB应用程序的相关技术,在传统的WEB应用程序开发的基础上,对基本的设计模式进行了改进,采用三层开发模式来降低系统各个模块之间的耦合性,并通过一个具体模块的实现来说明各个层次的设计和实现。
全文共分为五章:
第1章,引言。
介绍了信用卡管理软件的发展现状,并进一步分析了该类软件开发过程中存在的问题;
第2章,信用卡系统总体设计分析。
概括分析说明了信用卡管理的主要业务,在了解用户需求的基础上,设计了系统的总体功能模块,采用了UML语言对系统进行建模;
第3章,系统研发技术。
阐述了MVC设计模式以及常见的JSP设计模式,并介绍了Struts这个用来实现MVC设计思想的开源项目,另外还对引入的数据持久技术和本文实现这种技术的Hibernate持久框架做了介绍,也对整合前两个框架实现依赖注入与切面编程的Spring做了简要介绍;
第4章,客户管理子系统的设计与实现。
通过对该模块的实现,来体现整个设计思想,并介绍了本文实践项目的一些亮点与独到之处;
第5章,系统评价。
主要从系统安全和性能特点两方面来介绍;
第6章,总结语。
总结整个设计,并说明不足及进一步改善的方向。
第2章信用卡管理系统总体分析
2.1系统简介
信用卡管理系统是集账户管理、信用卡管理、用户信息维护、报表信息管理为一体的业各系统,具有灵活的应用架构、费用结构和产品定义,在系统、机构、产品、客户、账户、交易等各个层面均实现参数化,是一个以客户为中心的多产品、多账户、多卡综合应用系统。
2.2信用卡管理系统的总体功能框架
信用卡管理系统主要实现银行信用卡和客户间交易的记账和管理功能。
信用卡管理涉及到的内容很多,但从大体上来看,它的主要业务可以归纳为四个部分:
账户管理、信用卡管理、报表管理、系统管理;
主要面对三类用户:
银行普通员工、银行部门经理、系统管理员。
信用卡管理系统的总体功能框架如图2.1所示。
图2.1信用卡管理系统功能结构图
2.3系统的开发原则
(1)可延展性和包容性
系统应具有较好的可延展性和包容性。
系统的可延展性应包括能够很好的兼容已有的系统和能够在今后一段时间内实现对系统软硬件扩展,能有效地保护已有的投资,系统易于扩充升级,既要满足当前业务的需求,又能随时进行扩展和维护。
(2)系统简洁,易使用、易维护
系统的设计符合日常办公运作的需求,功能不仅要实用,还应该简单易学,具有比较友好的用户界面,易于扩充。
整个开发设计层次简单明了,便于管理,易于扩充。
(3)为员工,经理提供良好的信息服务
系统对信用卡信息进行了合理的布局,以便于提供优质、高效的业务管理和事务处理,是系统用户对信用卡账户进行维护,完成信用卡交易记账和管理
(4)可靠运行,安全保密
在该系统的开发过程中,将通过身份认证,权限检查,来解决信用卡管理系统的安全性、保密性问题,确保系统的有效和安全运行。
2.4系统功能概述
信用卡管理系统不仅要管理信用卡使用的各个环节:
如开卡到记账、存取款的业务活动,还要管理所涉及到的各种对象和资源:
如管理员、系统用户、账户、信用卡等;
同时信用卡管理系统还要提供相应的算法来结算账单。
其中客户管理模块主要的业务功能实现,将在以下进行相关的介绍。
(1)客户开户申请管理子模块
客户提交开户申请表,进行合法性验证,交给银行员工审核,如果审核通过,将客户信息填入客户信息表,并为客户开通信用卡服务所需的账号,客户开户管理子模块的业务流程如图2.2所示。
图2.2客户开户管理子模块业务流程示意图
(2)账户信息维护子模块
通过对开户客户的消费、取现、透支等交易记录统计,银行员工修改相应账户的信用额度,同时完成账户的销户工作。
该模块的业务流程如图2.3所示。
图2.3账户信息维护子模块业务流程示意图
(3)取款管理子模块
取款管理子模块主要完成取款申请、取款合法性验证、自动完成取款额与可用额、信用额度的核对等,最大限度的实现取款的自动化。
该模块的业务流程如图2.4所示。
图2.4取款管理子模块业务流程示意图
图2.5账单管理子模块业务流程示意图
(4)账单管理子模块
账单管理是信用卡管理中很重要的一部分。
该模块主要列出客户交易账单的信息,并对每月账单进行相应的结算,以便客户进行查询与打印。
该模块的业务流程如图2.5所示。
(5)报表管理子模块
报表管理是信用卡管理中只针对银行经理一个模块。
通过查看报表,银行经理可以了解银行开户、户头信用额、信用卡透支的现状及其发展趋势,清晰的把握信用卡业务的发展脉络,制定出相应的发展策略。
该模块的业务流程如图2.6所示。
图2.6报表管理子模块业务流程示意图
以上描述了客户管理、报表管理的大致功能及其数据流图,而信用卡的管理及系统管理,其业务流程与客户管理开户与信息维护的流程大致相似,因此这里不做过多介绍。
2.5系统技术构架
本系统采用了先进的设计理念和一些主流的技术。
系统采用基于MVC的J2EE技术和Web技术来实现的。
传统的Web技术平台是一个三层结构。
如图2.6所示。
图2.7WEB三层结构示意图
目前,Web技术都是通过Http来实现客户端和服务器的通讯的,对于简单的HTML静态文本来说,Http是一个很好的选择。
但Http却不能很好地应用于复杂的业务处理,因为当用Http进行通讯时,必须以Web服务器作为中介。
然而当同一时刻客户访问量过大时,Web服务器则将成为整个系统的瓶颈。
而基于MVC的J2EE技术能很好地解决以上问题。
根据项目需求分析,确定本系统必须具备的性能有:
(1)具有良好的交互性:
工作内容中有相当大的部分是人机交互,这就要求系统的交互性要强,从而满足需求。
(2)具有较好的可扩展性:
工作的内容和形式具有多变性,从而要求系统具有良好的可扩展性。
(3)良好的可维护性:
系统投入使用后,主要是由管理员承担系统维护的工作,维护人员不定期变动,这就要求系统的可维护性强。
(4)较好的跨平台性:
用户可能使用各种不同的操作系统,而且为了适应今后可能的变化,系统应具有较好的跨平台性。
一个典型的J2EE应用能很好地满足以上的性能要求,它至少包括表现层、业务层、数据持久层和数据库服务器四个部分。
在开发信用卡管理软件组件模板时,本文采用Struts来实现信用卡系统的表现层,数据持久层选择了ORMappingTools(Hibernate),业务逻辑层则用普通Java对象,把Struts和Hibernate这两种在业内比较推崇的开源技术相结合[2],并引入Spring依赖注入,使用JavaBean代替EJB,进一步整合前两个框架,提升了项目开发的效率和易维护性。
这样也相应地扩展了传统Web的三层体系结构,本文开发的系统体系架构如图2.8所示。
图2.8信用卡管理系统技术结构图
这种设计使服务器端和数据服务端可以根据系统的需求进行配置,为系统结构提供极大的灵活性和收缩性。
采用该多层结构技术的另一个优势是“瘦”客户端的设计和实现。
主程序和主要的业务功能模块都放在应用服务器上,客户端只需安装浏览器就可以在本地运行。
本信用卡系统设计中,客户端为浏览器,中间层以Tomcat作为应用服务器支持业务逻辑的处理,以MySQLServer5.0作为数据库服务平台。
第3章系统平台与技术
3.1MVC设计模式
3.1.1MVC模式的介绍
随着Web开发的不断发展和需要,MVC模式被推荐并成为Sun公司J2EE平台的设计模式,并且在应用中受到越来越多的开发者的欢迎。
Model-View-Controller原来是XeroxPARC在八十年代为编程语Smalltalk-80发明的一种应用程序的框架结构,至今已被广泛使用。
该框架结构支持三层结构的类:
表现应用程序状态层、屏幕表现层和控制流层,因此这三层被称为模式(Model)、视图(View)和控制器(Controller)。
MVC是可以满足那些需要为同样的数据提供多个视图的应用程序的开发需要,在开发与用户界面相关,特别是对用户界面要求较复杂的相关的应用程序时,可以很好地以不同的方式来显示同一数据,也就是在不改变软件功能的前提下,可以实现用户对用户界面的个性化要求,而MVC模式的最大特点就是将业务层与表示层分离,而且提供了很多使显示界面更加个性化的标签库,所以它能更好地实现用户界面的各种个性化需求。
MVC通常用于分布式应用系统的设计和分析,如:
大型商业网站、企业信息系统、管理信息系统、决策支持系统等,但它本身并不局限于某一个特定的领域。
MVC设计模式,最近几年被推荐为SIJN公司JZEE平台的设计模式,它强制性地把应用程序的输入、处理和输出分开[3]。
它的三个核心部件分别是模型、视图和控制器,它们各自处理各自的任务:
(1)模型(业务逻辑层):
表示企业数据和业务规则,实现具体的业务逻辑、状态管理的功能。
在MVC的三个部件中,模型拥有最多的处理任务。
例如它可能用像EJB和ColdFusionCompanies这样的构件对象来处理数据库。
被模型返回的数据都是中立的,也就是说模型和数据格式无关,这样一个模型能为多个视图提供数据。
由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
(2)视图(表示层):
即用户看到并与之交互的界面,是应用程序的外在表现,通常实现数据的输入和输出功能。
对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术也层出不穷,它们包括MacromediaFlash和像XHTML、XML/XSL、WML等一些标识语言和WebServices。
因此如何处理应用程序的界面变得越来越有挑战性。
MVC一个大的好处是它能为你的应用程序处理很多不同的视图。
在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。
(3)控制器(控制层):
起到控制整个业务流程的作用,根据用户的输入调用相应的模型和视图去完成用户的需求和相关的操作。
具体地来说:
控制器本身不输出任何东西和做出任何处理。
它只是接受客户的请求并进一步决定调用哪个模型去处理该请求,并根据处理结果来确定用哪个视图来显示模型处理之后返回的数据。
它们三者之间的关系如图3.1所示。
图3.1MVC组件类型的关系和功能
3.1.2MVC开发的优势
经过以上对MVC开发模式的介绍,以及两种JSP开发模式的比较,我们对MVC开发模式有了一定的认识,这里将进一步介绍说明利用MVC模式开发的优势,具体表现在以下几个方面:
(1)MVC模式很好地解决了软件工程中如何使软件系统各模块之间最大限度地降低其复杂的耦合关系,以及系统显示逻辑和业务逻辑之间的矛盾(即用户界面的多变性和业务逻辑的相对不变性),可以尽可能地提高系统的可维护性和可扩展性。
(2)模型、视图、控制器三者的相互独立,当我们改变其中一部分时,其他两部分不会受到影响,进而构造出良好的松耦合构件。
(3)所有的模型和视图都是由控制器连接和调用的,控制器控制功能使得它可以根据用户不同阶段的不同需求选择不同的模型进行处理,并选择不同的视图将处理结果显示给用户,很好地提高了系统的灵活性。
(4)一个模型可以拥有多个视图或者说多个视图可以共享一个模型。
多个视图能够提供多种数据显示方式,以满足不同用户的需求。
变化传播机制可以确保所有相关的视图和其模型达到同步,这一切都可以通过控制器的协调来实现。
(5)模型的可移植性和伸缩性。
模型的相对独立性使得它很容易被移植到新的平台工作,很容易被改变业务规则而不影响视图和控制器[4]。
然而,由于MVC是一个非常复杂的系统,所以采用MVC实现Web应用时,最好选一个现有的MVC框架,在此之下进行开发。
由于Struts具有完整的文档并且相对来讲比较简单,所以一般采用它来开发MVC系统,实际上,Struts就是在JSPModel2的基础上实现的一个MVC框架。
3.2Struts项目概述
Struts是Apache组织的一个项目,像其他的Apache组织的项目一样,它也是一个开源项目。
Struts作为一个设想是CraigRMcClanahan于2000年提出的,该设计的目标是为利用Java技术开发基于MVC模式的Web应用提供一个标准模式。
基于Struts架构的Web应用程序基本上符合JSPModel2的设计标准,是MVC设计模式的一种变形,提供了对开发MVC系统的底层支持,它采用的主要技术是Servlet、JSP和CustomTagLibrary[5]。
Struts框架是一种基于Java的技术,Web应用程序开发人员通过Struts框架即可充分利用面向对象设计,代码重用及“编写一次,到处运行”的优点。
另外,Struts不仅是拥有自己的控制器,同时整合了其他的一些技术来实现模型层和视图层,例如:
在模型层,它可以很容易与数据库的访问技术相组合,包括JDBC技术和EJB技术;
在视图层,它能够与JSP、XSL等组件相结合[6]。
所以从一定的意义上讲,采用Struts来实现基于MVC的Web应用的开发,可以根据具体的需求来选择设计的复杂程度,具有很好的扩展性。
Struts的主要优势功能如下:
(1)Struts中包含一个控制器Servlet,用来控制用户的请求发送到相应的Action对象;
(2)在JSP页面中可以选用自定义标签库,并且在控制器Servlet中提供关联支持,这样可以帮助开发人员方便快捷地创建交互式表单应用;
(3)Struts还提供了一系列实用对象:
XML文件处理、通过JavaReflectionAPI自动处理JavaBean属性、国际化的提示和消息。
3.2.1Struts核心组件
Struts是一组相互协作的类、Servlet和JSP标记,它们组成了一个可重用的MVC设计模式。
这个定义表示Struts是一个框架,而不是一个库,但同时Struts也包含了丰富的标记库和独立于该框架工作的实用程序类库。
Struts通过一些组件类来完成框架的功能,这些组件包括:
ActionServlet、Action、ActionForm、ActionForward、ActionMapping。
1.ActionServlet
ActionServlet继承自javax.servlet.http.HttpServlet类,它在struts中扮演的角色是中心控制器。
它提供了一个中心位置来主要负责将Http客户请求组装后,根据配置文件的指定的描述,转发到适当的处理器。
另外,除了作为应用程序的前端控制器外,ActionServlet实例还负责初始化和清除应用程序的资源。
2.Action
一个Action类的角色,就像是客户请求动作和业务逻辑处理之间的适配器,它作为应用程序响应用户请求的动作,将请求与业务逻辑分开。
这样用户的请求和Action类之间可以有多个点对点的映射。
Action最为常用的方法是execute(),典型的Action类一般要在execute()方法中实现下列逻辑:
(l)检查用户session的当前状态。
如果session过期或者用户没有登录,要将表示层的页面跳转到用户登录页面;
(2)检查用户输入的合法性。
调用FormBean实例的validate()方法检查一些字段的输入值是否恰当或合法;
(3)执行业务操作。
调用业务逻辑Bean的相应方法执行用户的业务请求;
(4)更新服务器端的对象。
将Model的状态改变通知给View,并返回请求页面。
3.ActionForm
一个应用系统的消息转移(或者说状态转移)的非持久性数据的存储,通常由ActionFormBean来负责,它的主要功能是为Action的操作提供与客户表单相映射的数据。
对于每一个客户的请求,一般要经历如下几个步骤:
(l)检查Action的映射,确定配置文件中己经配置了对ActionForm的映射;
(2)根据Name属性查找ActionForm的信息;
(3)查找ActionForm的使用范围,确定在此范围下是否存在对应的FormBean的实例;
(4)假如在当前范围内,相应的FormBean的实例己经存在,而且对当前的请求来说是同一类型的话,就可以重用,否则,就要重新构建一个FormBean的实例;
(5)调用FormBean的reset()方法;
(6)调用对应的set()方法,对状态属性赋值;
(7)如果validated属性值被设置为true,则调用FormBean的validate()方法;
(8)如果validate()方法没有返回错误,控制器将ActionForm作为参数,传给Action实例的execute()方法执行。
4.ActionForward
当Action实例的execute()方法运行完毕后,控制器根据Mapping可以将响应信息转到适当的地方,ActionForward的主要功能就是对将要转向的视图的地址的一个封装。
转向的各种属性也可以在配置文件中设置性,这样就大大提高了软件的复用性和可维护性。
5.ActionMapping
ActionMapping以Java的形式封装了怎样将一个请求URL映射到与其对应的Action的一些信息。
ActionMapping对象帮助进行框架内部的流程控制,它们可以将请求URL映射到Action类,并且将Action类与ActionFormBean相关联。
Struts框架的控制器ActionServlet在内部使用这些映射将控制转移到特定的Action类的实例。
3.2.2Struts的工作流程
采用Struts框架开发Web应用系统时,在Web应用启动时就会自动地加载并初始化ActionServlet,此时ActionServlet将会从Struts-config.xml文件读取配置信息,并把它们存放到各种对应的配置对象中。
当ActionServlet接受到一个客户请求时,将执行如下流程:
(l)检索与用户请求匹配的Action实例,如果不存在,控制器直接将请求转发给JSP或静态页面;
如果有对应的Action,并且这个Action有一个相应的FormBean,ActionForm被实例化并用Http请求的数据来填充其属性,然后保存在ServletCotenxt中,以备其它Action对象或JSP调用。
(2)控制器根据Struts-config.xml的配置信息将请求切换到具体的Action,对应的相关的FormBean的信息也一起发送给Action类的execute()方法。
(3)Action的execute()方法返回一个ActionForward对象,控制器ActionServlet再通过该ActionForward对象来进行转发工作。
(4)Action根据业务处理的不同结果返回一个相应的目标响应对象给总控制器,这个目标响应对象可以对应一个具体的JSP页面或者是另外一个Action。
(5)总控制器ActionServlet根据业务功能Action返回的目标响应对象(多数情况下,该响应目标是一个JSP页面),将Http请求转换到该目标响应对象中,进一步将结果页面展现给用户。
3.2.3Struts框架