BBS论坛的设计.doc_第1页
BBS论坛的设计.doc_第2页
BBS论坛的设计.doc_第3页
BBS论坛的设计.doc_第4页
BBS论坛的设计.doc_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

BBS论坛详细设计说明书目 录第一章 引言51.1编写目的51.2背景51.3定义61.4参考资料6第二章 系统结构设计72.1 MVC中各层组件设计72.2 项目中的各个用例的时序图222.3项目中的各个用例的协作图262.4项目中的各个活动图292.5项目中的各个状态图31第三章 详细设计类图333.1数据访问层组件类图333.2业务处理层组件类图343.3控制层组件类图353.4表示层组件类图353.5系统总体类图36第四章 系统主要模块的界面设计364.1后台内容发布系统主页面设计374.2后台内容发布系统二级页面设计374.3前台用户注册页面设计384.4 前台用户登录页面设计384.5后台用户登录页面设计394.6后台管理页面设计39第五章 系统中游客注册程序详细设计说明405.1游客注册程序(功能模块)描述405.2功能405.3性能415.4输入项415.5输出项415.6算法415.7流程逻辑425.8接口425.9存储分配435.10注释设计435.11限制条件435.12测试计划435.13尚未解决的问题43第六章 系统中用户在线注销程序详细设计说明446.1程序描述446.2功能446.3性能446.4输入项446.5输出项446.6算法446.7流程逻辑456.8接口456.9存储分配466.10注释设计476.11限制条件476.12测试计划476.13尚未解决的问题47第七章 系统中注册用户登录程序详细设计说明477.1程序描述477.2功能477.3性能477.4输入项487.5输出项487.6算法487.7流程逻辑487.8接口497.9存储分配497.10注释设计507.11限制条件507.12测试计划507.13尚未解决的问题50第八章 系统中修改个人信息程序详细设计说明508.1程序描述508.2功能508.3性能508.4输入项518.5输出项518.6算法518.7流程逻辑518.8接口528.9存储分配528.10注释设计537.11限制条件538.12测试计划538.13尚未解决的问题53第九章 系统中查看留言评论程序详细设计说明539.1程序描述539.2功能539.3性能539.4输入项549.5输出项549.6算法549.7流程逻辑549.8接口549.9存储分配559.10注释设计559.11限制条件559.12测试计划559.13尚未解决的问题55第十章 系统中回复留言程序详细设计说明5510.1程序描述5510.2功能5610.3性能5610.4输入项5610.5输出项5610.6算法5610.7流程逻辑5710.8接口5710.9存储分配5810.10注释设计5810.11限制条件5810.12测试计划5810.13尚未解决的问题58第一章 引言1.1编写目的本文档作为BBS的详细设计说明文档,用于与用户确定最终的目标,并成为协议文本的一部分,同时也是本系统设计人员的基础文档。1.1.1 详细设计说明书目的本详细设计说明书说明了BBS论坛系统设计中的各个组件和类的详细设计和技术实现。1.1.2 预期读者本系统开发人员及维护人员。1.2背景BBS论坛,或者称为社区,是电子商务网站中一种常见功能,也是互联网上一种极为常见的互动交流服务。它为上网用户提供了也各自由的讨论区。通过论坛可以向用户提供开放性的分类专题讨论区服务,同时注册的用户可以根据需要在论坛上发表文章,交流技术经验,或者提出问题并表达自己的观点。不仅如此,上网的用户还可以在论坛中看到他人发表的文章,并且能够对该文章进行评论。一般情况下,BBS按不同主题分为多个布告栏,其设立多是依据使用者的要求和喜好,但多具有信件交流、软件交流、信息发布等功能。 目前,大部分BBS由教育机构、研究机构或商业机构管理,大多有自己的拨入电话号码,用户只需电脑、调制解调器和电话线就可通过电话拨号登录BBS站点。1.2.1 待开发软件系统的名称BBS论坛系统1.2.2 项目的任务提出者1.2.3 项目的任务开发者1.3定义1.3.1 本文档中涉及的专业词汇1、GB:中华人民共和国国家标准的英文缩写字母2、构件:具有某种功能的可重用的软件模版单元,表示了系统中主要的计算元素和数据存储。3、逻辑视图:描述支持系统的功能需求的视图。4、开发视图:也称模块视图,主要侧重于软件模块的组织和管理描述。1.3.2 名词说明1、BBS:Bulletin Board Service2、JSP(JavaServer Pages)JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易3、Struts只是一个MVC框架(Framework)它用于快速开发Java Web应用。Struts实现的重点在C(Controller),包括ActionServlet/RequestProcessor和我们定制的Action,也为V(View)提供了一系列定制标签(Custom Tag)。但Struts几乎没有涉及M(Model),所以Struts可以采用JAVA实现的任何形式的商业逻辑。1.4参考资料1、本软件项目规划依据标准为国家表准:GB856T88;2、技术参考资料(1)J2EE项目实训Hibernate框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波等编著 清华大学出版社 2008 年5月(2)J2EE项目实训Spring框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波等编著 清华大学出版社 2008 年5月(3)J2EE项目实训UML及设计模式(21世纪高等学校实用软件工程教育规划教材)杨少波等编著 清华大学出版社 2008 年5月(4)J2EE项目实训Struts框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波等编著 清华大学出版社 2008 年10月第二章 系统结构设计2.1 MVC中各层组件设计2.1.1 MVC中的视图层的设计1、一个典型的Web应用的前端应该是表示层表示层由UI(User Interface)和UI控制逻辑组成。(1)UI(User Interface) UI是客户端的用户界面,负责从用户方接收命令,请求,数据,传递给业务层处理,然后将结果呈现出来。(2)UI控制逻辑 UI控制逻辑负责处理UI和业务层之间的数据交互,UI之间状态流程的控制,同时负责简单的数据验证和格式化等功能。由于在本项目中的表示层使用Struts框架,下面为Struts所负责的主要功能:l 管理用户的请求,做出相应的响应l 提供一个流程控制器,委派调用业务逻辑和其他上层处理l 处理异常 l 为显示提供一个数据模型 l 用户界面的验证以下内容,不该在Struts表示层中出现,因为它们应该是与表示层无关的。l 与数据库直接通信l 与应用程序相关联的业务逻辑及校验l 事务处理因为,如果我们在表示层引入这些功能的实现代码,将会给系统带来高耦合和难以维护的后果。(3)本系统的表示层拟采用的技术l HTML:实现前台页面的组织编写。l Javascript:利用此脚本语言,实现前台表单的简单验证。l CSS:利用此技术来确定页面布局,达到前台页面的美化效果。l JSP:利用jsp脚本与后台进行交互,以实现页面的动态化。l Struts:利用struts标签技术以实现表示层和业务层的分离。l Ajax:此技术是近年来流行的基于Web2.0思想的客户端技术,旨在提高页面友好性的异步刷新技术。本项目中对Ajax技术的使用主要是在用户注册、登录、密码找回等前后台交互型页面以及拥有多级列表联动的页面。l Frameset:本系统后台拟采用此技术实现后台页面风格的一致性。整体设计为上左右结构,如图所示:2、基于Struts的JSP页面所产生的表示层(1)如何实现表示和业务的分离-利用标签技术尽管在Struts的JSP页面中还是可以继续使用Java脚本的,但是,标准的做法是尽可能的使用标签和Java Bean,只有这样一来,才能够把业务逻辑和页面表示彻底分开,提高了系统设计的规范性和代码的可重用性,为后期升级提供方便。(2)在本项目中所涉及的标签一方面即可以使用Struts中所提供的各个标签库的标签,同时页根据项目的实际需要定制了自己的标签库的标签。本项目中的表示层中的部分组件类的类图以及它们之间的关系的图示请见下面(3)View Help组件(JavaBean)将某些数据格式化或者数据转换的功能也可以设计为JavaBean组件。3、客户端的JavaScript脚本的应用(1)应用JavaScript时的要点在Struts的应用中,一般是不再鼓励使用客户端的校验技术,而改用服务器端的校验技术以提高项目的安全性和更好的兼容性。(2)JavaScript在本项目中的应用之一为了能够在客户端对用户的表单进行及时地检查和实现更友好的人机交互,在某些页面中仍然使用客户端的JavaScript脚本技术-主要承担实时交互和实现动画效果。(3)JavaScript在本项目中的应用之二承担实现AJAX技术的编程语言。4、复合视图模式(1)复合视图(Composite View) 设计模式它定义了各种能够以有效地把一个用户的接口划分成多个子视图的规则,并且可以被重新结合起来以生成需要的总体视图。在本项目中主要利用下面的两种形式来实现复合视图。(2)其一是“Macromedia Dreamweaver MX 2004”中所提供的静态模块页面(3)另一种则是采用Tiles标签库所实现的动态布局页面Tiles强大的模版功能能够使页面获得最大的重用性和灵活性(4)HTML中的FrameSet技术5、本项目中的各种ActionForm类的编程(1)标准的ActionForm类有了ActionForm类,网页的表单和后台的Action之间就搭建了一个几乎无缝的平台,所以这个模块是非常必要的,ActionForm类是实现封装网页中的Form控件,是采用面向对象的方式来操作Form表单。本项目中对各种表示层的页面中的各个表单进行数据封装,设计出各种对应的ActionForm类。(2)DynaActionForm技术在本项目中的应用通过利用DynaActionForm类可以不必创建一个个具体的ActionForm类的代码,而只需要在Struts的系统的配置文件struts-config.xml种进行ActionForm组件种的各个属性的配置定义,从而达到减少了ActionForm类的数目的目的。6、AJAX技术及DWR框架在本项目中的应用(1)应用的目的为了提供本项目的表示层组件的可操作性,计划将在本项目的一些功能模块中应用AJAX技术。(2)应用DWR框架为了简化AJAX技术的具体开发过程,本项目以DWR框架作为开发的首选平台。(3)主要的应用模块l 用户登录模块中的用户名称的实时检查l 用户注册时的用户名称是否重用的实时检查l 在各种查询方式中的表单数据之间的相互关联l 首页中的在线用户信息的实时显示7、关于表单中的重复提交的问题的解决利用struts的同步令牌机制(token)解决Web应用中重复提交的问题。在本项目中主要是针对BBS发表的表单进行限制(而对于用户注册表单可以不需要加以限制,因为当用户注册页面回退时,表单中的所输入的密码回自动地被清空,从而也就限制了重复提交的可能性)。8、页面中的动态内容的缓存缓存(Cache)机制是提高系统运行性能必不可少的技术。缓存机制从原理上讲比较简单,就是在原始数据第一次读取后保存在内存中,下次读取时,就直接从内存中读取。缓存机制也是代理模式的一种实现。是否有缓冲机制(Cache)是衡量一个J2EE产品是否成熟的重要标志。因为缓冲对于J2EE系统的运行性能有至关重要的作用,特别是在大量用户并行访问时,没有缓冲机制几乎是不可想象的事情。(1)应用开放源代码项目OSCache来改善系统运行性能在J2EE系统中,我们经常需要处理一些特殊的动态内容,这些内容在一个时间段内的变更非常有限,但是又不得不将他们确定为动态内容进行输出,并且这些内容非常消耗数据库系统资源或者web服务器的资源,这时我们就可以采用Cache- 一种用于提高系统响应速度、改善系统运行性能的技术-来优化我们的系统。尤其是在Web应用中,这种处理可以很显著的改善系统运行性能。开放源代码项目OSCache提供了在J2EE系统中实现缓存需要的丰富的功能。通过应用OSCache,我们不但可以实现通常的Cache功能、自由的设定cache的相关特性比如缓存时间段/缓存内容等,提升系统性能,而且还能有效的改善系统的稳定性。(2)对本项目中某些页面内容应用OSCache框架9、Web系统安全性的考虑在网络经济迅速发展的今天,安全性是目前系统主要考虑的性能之一。就本系统而言在表示层拟采用如下技术增强系统的安全性。(1)本系统中的基本的安全性从以下几个方面加以实现l 登陆验证码利用一个后台服务器端的功能组件实现随机产生一个验证码,由于验证码是机器随机产生的,因此暴力破解程序无法预料到具体是什么,所以可以防止暴力破解。l 登陆身份验证系统的每个功能都必须经过身份验证后才能访问,没有认证的请求会被过滤掉,这是最基本的安全要求。l 所有功能都通过Struts的Action来进行访问,不直接以jsp的形式向用户提供功能访问这样一方面可以防止向用户暴露程序的资源名称,另一方面也可更方便的进行权限控制。l 对用户的请求进行与其身份相匹配的识别(2)本系统对数据合法性的检查分为多级在页面使用javascript脚本语言进行简单合法性检查,在ActionForm中对数据进行进一步检查,在业务处理层会对数据做最后的检查。(3)对Struts的ActionServlet设置Filter利用该Filter来检查用户的权限,这样既可以防止用户登陆后跨url访问。在本项目中添加一个WebBBSFilter组件来监控后台管理的URL。(4)防止扰过权限认证的直接资源访问虽然前面的设计中,已经要求所有的功能都通过struts的Action来进行访问,但是还是不能排除恶意用户可能会知道程序资源名称(jsp文件),如果这类用户直接输入jsp文件的url访问,有可能会对系统形成威胁。因此需要禁止所有用户发起的直接资源访问。通常以这种方式来实现:在Web应用中创建一个从不使用的角色:NeverUsedRole,将所有的jsp资源文件配置为必须具有NeverUserRole才能访问。由于根本没有任何用户可以成为该角色。由于根本没有任何用户可以成为该角色,所以也就无法对该角色对应的资源直接访问。 *.jsp protected Resource /*.jsp neverUsedRole BASIC Default this is not Exist User neverUsedRole 注意:也可以采用用 WEB-INF 下的一个目录来存放各个JSP文件,以避免被客户端直接访问。(5)本系统对后台管理员划分角色系统管理员、频道管理员、栏目管理员。每个角色各有其权限。如系统管理员具有频道管理、广告管理、用户管理权限;频道管理员具有栏目管理、公告管理、评论管理权限,同时频道管理员只具有本频道下的栏目、公告、评论的增删改查权限,不能对其他频道下的栏目、公告、评论进行访问;栏目管理员具有栏目内容,即新闻管理的权限,不能对其他栏目下的内容进行访问。本系统权限控制采用如下方法实现:设计方法:权限字符串分三段,第一段标识用户的身份:1为系统管理员;2为频道管理员;3为栏目管理员。第二段标识频道ID。第三段标识栏目ID。各段之间用隔开。判断方法:截取登录用户权限字符串第一个字符,如果为1,进入系统管理员页面;如果为2,截取第二字段保存,进入频道管理员页面;如果为3,截取第二字段保存,近一步截取第三字段保存,进入栏目管理页面。10、各个模块的页面版式和内容布局的设计要求(下面给出主页设置形象图-仅供参考) logo中科院计算所培训中心论坛论坛的各个方面的信息及状态显示区版权所有*论坛的滚动公告信息论坛的各个版块的子分类信息显示区(每个版块一个区域)论坛的各个版块的子分类信息显示区(每个版块一个区域)论坛的各个版块的子分类信息显示区(每个版块一个区域)论坛的各个版块的子分类信息显示区(每个版块一个区域)论坛的各个版块的子分类信息显示区(每个版块一个区域)论坛的在线用户状态信息显示区放进收藏夹 返回首页 联系我们2.1.2 MVC中的控制层的设计1、Struts中的控制层的架构控制层是整个系统的核心,它是一个状态与流程的管理器。来自UI所有的命令与数据经过控制层分发给业务层或其他UI,这样我们可以把流程、权限等逻辑单独封装。这样将能够达到最大化的业务重用。本系统的控制层采用Struts框架的控制器,分为前端控制器ActionServlet和后端控制器Action。其中前端控制器旨在统一程序的执行点,同时使用扩展的ActionServlet类对中文编码问题进行处理。后台控制器各Action类旨在分离业务模块的调度和业务模块的实现,使其更多的用于组织调度特定的业务模块同时转发处理的结果。(1)Struts中的控制层的架构说明在Struts中一般采用两个控制器-前端控制器ActionServlet和各个业务模块的后端控制器Action类(一个ActionServlet和多个Action)。(2)采用这样的系统架构的主要目的是l 一方面借助前端控制器ActionServlet来统一Web应用的请求的启始点,同时也可以在ActionServlet中完成一些请求的前期预处理,使业务控制器侧重于业务功能的调度。l 另一方面,对每个功能模块则允许提供各个模块的控制器组件-Action。(3)前端控制器和后端控制器之间的关联实现两个控制器之间以struts-config.xml实现松藕合的关联-其实,Struts的控制层的这种架构是J2EE中的截取过滤器设计模式和基于Servlet的业务请求控制器设计模式的具体应用。2、Struts 中的前端控制器ActionServlet组件(1)主要的作用统一程序的执行点并隐藏Web访问进入点固有的“混乱”-用户可能会用不同的URL进入,帮助开发者建立起清晰和明确的秩序和规则。(2)本项目中采用扩展ActionServlet类l 目的:实现普通的Web应用中的前端过滤器Filter的作用尽管一般情况下ActionServlet本身是不需要重新设计的,但在需要对中文进行编码处理等的时候,所以这里需要重新设计ActionServlet,主要是用以统一处理请求的编码方式问题。l 自定义我们自己的BBSActionServlet类组件-实现我们系统的一些功能的要求。(3)通过扩展ActionServlet类来实现下面的各种功能l 用户发帖中的中文问题l 实现对系统配置XML解析组件的调用3、各种后端业务控制器Action类(1)Action类的主要作用为了能够按照业务功能来划分业务模块和关联业务模块/表示层,在本项目中设计出各种后端业务控制器Action类。(2)分离业务模块的调度和业务模块的功能实现尽管Action类本身是可以处理业务功能的实现,但正规的做法是把Action类作为一个业务逻辑的控制器来使用,也就是对Action类的应用-更多地的是用于组织、调用特定的业务模块和转发业务处理后的结果。(3)DispatchAction类的具体应用在实际开发中,为了减少项目中的Action类的个数,可以应用DispatchAction类技术。在本项目的某些功能模块中应用了DispatchAction类。(4)编程实现线程安全的Action类l 单实例多线程控制器Servlet(ActionServlet)仅仅创建一个Action 类的实例,并用于所有的请求。这样需要编写Action 类使其能够在一个多线程环境中正确运行,就象你必须安全地编写一个servlet的 service() 方法一样。 l 如何实现Action类的线程安全帮助线程安全编程的最重要的原则就是在我们的 Action 类中仅仅使用局部变量而不是实例变量(类中的成员变量)。因为局部变量的创建于一个分配给(由JVM)每个请求线程的栈中,所以没有必要担心会共享它们。4、命令设计模式在本项目中的应用(1)命令设计模式在本项目中的各个Action类中为了更好地对业务模型组件进行调度,采用命令设计模式。通过Command设计模式实现把命令的请求和命令的执行相互分离,对命令的请求者以统一的形式进行命令请求(功能调用)。命令的请求者客户(各个Action类)命令的调度者司令官(Commander)命令的执行者士兵(各个业务功能组件)命令的执行者士兵(各个业务功能组件)命令的执行者士兵(各个业务功能组件)(2)注意在Struts中的ActionServlet和各个业务Action之间就是Command模式的应用。具体的程序代码:请见对应的各个程序l 命令的请求者某个Action类-l 命令的调度者(司令官)-l 命令的执行者(士兵)-(3)将命令模式应用到本项目的控制层 Action类的编程中在本项目中的某些Action类由于要完成大量的请求调度(如ShowSomeInfoAction类),因此对这些类应用命令模式来解藕命令的请求者和命令的执行者。(4)进一步利用Spring IoC来解藕命令的请求者和命令的调度者在一般的命令模式的实现中,命令的请求者和命令的调度者是紧藕合的,而在本项目中应用了Spring的IoC,从而还能够实现将命令的请求者和命令的调度者做进一步的解藕。5、利用Log4J实现系统的访问日志6、应用Spring IoC来管理各个对象Struts(承担表示层和控制层的角色)Spring(利用IoC进行各种对象的管理 )Hibernate(实现数据访问和O/R Mapping)相互集成对 DAO进行管理由于本项目的系统架构采用的是Struts +Spring + Hibernate,因此对于控制层和业务处理层之间的关联可以通过Spring IoC来管理各个对象。2.1.3 MVC中的模型层设计-业务处理组件1、业务层所主要负责的功能业务层封装了实际业务逻辑,包含数据验证,事物处理,权限处理等业务相关操作,是整个应用系统的核心。我们将业务层具体分为业务数据与业务操作(业务的功能实现)两部分。业务层所主要负责的功能如下:(1)处理应用程序的业务逻辑和业务校验(2)管理事务(3)提供与其他层相互作用的接口(4)管理业务层级别的对象的依赖(5)在表示层和持久层之间增加了一个灵活的机制,使得他们不直接联系在一起(6)通过揭示从表示层到业务层之间的上下文(Context)来得到业务逻辑(business services)(7)管理程序的执行(从业务层到持久层)从编码的视角来看,这层是最容易被忽视的。我们往往在用户界面层或持久层周围看到这些业务处理的代码,这其实是不正确的。因为它会造成程序代码的高耦合,这样一来,随着时间推移,这些代码将很难维护。2、各个业务模块的业务组件的实现(1)业务操作模块的主要功能业务操作负责对业务数据进行各种业务相关的处理,例如验证,流向,整合,事物,权限等,但它不负责有关对数据源的操作。(2)本项目中的主要的业务功能JavaBean组件在本项目中根据业务应用的类型的不同,采用不同的业务模块的JavaBean组件-UserManagerBean实现用户管理,而用BBSInfoManagerBean实现信息管理。(3)“面向接口”编程由于在本项目中的各个业务功能组件和数据访问组件为了能够达到松散关联,采用了Spring中的IoC来进行管理。因此,各个业务功能组件都遵守“面向接口”编程的原则,从而提供上面的两个接口-两个接口中的方法定义。(4)业务功能JavaBean组件与业务实体组件的关系设计l 分离业务数据与业务操作将业务数据单独封装到只有数据get,set的业务实体组件类中,这个业务实体组件类也可以充当DTO。l 整合业务数据与业务操作,将业务数据与相关的业务操作封装在一起称为业务实体此业务实体作为统一的业务层为表示层提供服务,同时也负责作为DTO在各个层次间传输。(5)利用Spring框架技术来分离业务功能JavaBean组件之间的依赖关系 各个业务模块之间的依赖,有时候会是难以解决的问题,尤其是一些可以重复利用的业务组件,例如权限管理,邮件发送等等。管理好这些各种不同的业务组件是我们的目标,IoC容器为我们提供了最完美的方案,通过它将不同的模块注入到系统中,我们可以在不知道这个组件存在的情况下调用它。3、业务实体组件(VO)(1)业务实体组件业务数据又是业务逻辑的核心,最终业务数据将以一种固定的格式表现于内存中。我们可以将它在系统的各个层次间传输,从而充当DTO角色。(2)表达业务数据的方式一般分为两种:Table Model和Domain Model综合各种因素考虑,虽然业务简单对应直接的系统我们以Table Model建模开发效率很高但难免保证系统日后不会变的复杂,因此出于复用性,扩展性,性能等方面选用Domain Model建模为佳。l Table Model是将数据库中的表直接映射成为业务数据对象对于复杂业务关系的表达就很不直观。只适合于业务需求与数据表对应关系很直接的需要快速开发的情况。l Domain Model它是根据实际业务规则并利用OO思想来建模,这样很适合业务复杂的系统。通常采用自定义数据实体(Custom Data Entity)方式表达。(3)UI与业务实体之间的数据交互此时负责数据交换的业务实体我们一般采用DTO(Data Transfer Object)来承担,处理输入时我们从UI控件的获得数据填入DTO再向下传播,处理输出时用户发出请求业务层会将数据以DTO的形式返出再赋给UI控件展现。当然,我们则需要一种方式来自动解决这样的来回赋值问题。(4)本项目中的各个业务实体组件根据WebForm(在本项目中由Struts中的各个ActionForm组件)产生出各个业务实体组件,利用业务实体组件实现对业务处理过程中的数据进行封装,同时也为后面的持长类提供数据来源。4、GOF设计模式具体应用-在本项目中应用Template设计模式(1)模板设计模式模板设计模式一般是一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑;不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。(2)Template设计模式在本项目中的应用在一个应用系统中,尽管各个业务功能差别比较大。但各个业务模块之间一般还会存在一些共同的功能实现要求-如对DAO组件的对象创建或者获得、log4j中的logger获得、数据库Connection的获得、参数的初始化等任务(基础服务功能),因此在本项目中对这些共同的功能加以提取并独立出来,形成一个抽象基类。同时,提供一个抽象的方法,由不同的业务功能模块的子类加以具体实现,这样统一了各个业务模块的业务实现方法5、Spring的IoC在本项目中的具体应用(1)目的为了降低业务层各个组件之间以及业务层与控制层和数据访问层之间的藕合度,在本项目中应用了Spring的IoC容器的技术以进行有效地对象管理。(2)整合Struts 、Spring和Hibernate三个框架由于本项目在表示层的开发中应用Struts框架,而在业务层中应用Spring框架,在数据访问层中应用Hibernate框架。但为了能够更加有效地应用三个不同的框架以充分发挥各个框架的优点,并达到无缝地关联各个框架,我们需要对三者进行整合。(3)Spring中的ApplicationContext的事件技术的应用6、过滤器与装饰模式具体应用本论坛系统由于要实现对用户发表的信息进行过滤-例如可以将帖子内容中的HTML语句过滤掉以及对特殊字符的转换、可以将帖子内容中Java代码以特别格式显示等。如果试图强行建立一种接口包含所有过滤行为,那么到时有新过滤功能加入时,还需要改变接口代码-因此,应用装饰模式实现动态地添加功能(各种不同的过滤功能)。因为,在系统中所需要的过滤功能有很多,为了能够达到这些过滤功能可以由论坛管理者来具体地动态决定,而且新的过滤功能可能随时可以定制开发出来。而GOF中的装饰模式能够满足这样的应用需要。注意:也可以利用Spring AOP中的Introduction Advice来实现上面的功能。7、Spring WebApplicationContext中的事件广播功能的应用WebApplicationContext中的事件广播功能的实现其实示应用了GOF中的观察者模式。使用观察者模式,可以通过触发一个观察者,由观察者通过另外线程来实施另一功能的产生和完成,而被观察者发出触发通知后,可以继续自己原来的逻辑行为。(1)用户注册成功后自动邮件发送(2)主题监测在本系统中,用户也许会对某个主题感兴趣,希望关于此主题发生的任何新的讨论能通过电子邮件通知他,因此他订阅监视了这个主题-例如,如果在有人回复某个主题时,立即进行电子邮件发送,通知所有订阅该主题的用户。8、XML技术在本系统中的系统的配置应用在本系统中应用XML文件作为系统的配置,这样使系统具有比较好的灵活性。在对XML文件的解析方面,本系统应用了JDOM技术。目前解析XML文件中的数据有很多中技术-在Java平台中,可以应用如DOM(/DOM/)和SAX(/)等两种比较标准的技术。DOM技术在解析XML数据时,由于是将整个文档一次性地读入内存,如果XML文档很大,系统的性能就会受到影响;而SAX则是动态地对每一行分析,无需全部读入,因此在分析大文档时速度比较快。但是这两种分析方法都是围绕XML树形结构展开的,在编制这两种分析器时,会涉及到大量XML概念的API,需要一定的XML基础和知识,使用起来有一定难度。而JDOM()技术则是一种封装了DOM/SAX的具体使用的XML轻量级解析技术,以非常符合Java编程方式的形式来解析XML,因此使用起来非常方便。9、全文检索和Lucene本系统计划在下各版本中增加对全文检索功能的支持,当然这个功能主要依赖Lucene(/lucene/docs/index.html)-一个开放源代码项目。Jakarta Lucene是一个高性能全文搜索引擎,可以跨平台应用于任何搜索应用。2.1.4 MVC中的模型层设计-持久层组件的设计1、实体类(持久类)、会话类和数据连接类对数据库中的数据访问的编程实现的相关类可以分成实体类(Entity Class)、会话类(Session Class)和数据连接类。通过使用这种数据访问层的模块设计和模式划分,使程序更加模块化,便于开发调和后期的维护。2、各种类的主要作用(1)实体类(持久类)的作用实体类对应于一个表中的记录数据的封装,也就是该类的一个实例对应于表中的一个记录。而且,该类中的属性和记录中的字段是一一对应的(Domain Entity),也可以与数据库表中的结构不完全一一对应(Custom Entity)。本项目中的各个实体类请见下面所示。(2)会话类的作用会话类对应于对一个表中的所有记录的操作(也即对实体)。主要为下面的几种类型的操作(执行上述任务的方法通常称为“CRUD”(增加、删除、修改、查询等操作)方法,这是由各项任务的首字母组成的一个缩写词):l 在数据库中创建记录(CREATE);l 查找并读取数据库中的记录并把业务实体数据返回给调用程序(READER) ;l 使用调用程序提供的修改后的业务实体数据更新数据库中的记录(UPDATE) ;l 删除数据库中的记录(DELETE)注意:本项目中的会话类主要采用基于Hibernate中的Session来实现的。(3)数据连接类的作用数据连接类主要是对数据连接操作的封装,以便数据源发生变更时能够尽可能减少对业务处理层、表示层的修改,尽可能减少对程序的变动。对数据库的连接本项目中采用J2EE平台中常用的DAO的设计模式来实现数据库的连接。表示层业务处理层数据访问层持久实体数据访问逻辑数据连接数据源3、DAO模式简介(1)DAO模式将对数据源的访问(也就是获得数据库的连接)抽象为一个类,从而利用数据访问对象可以实现对不同数据库类型和形式的数据资源进行访问。这种模式出现的背景在于数据访问的逻辑极大程度上取决于数据存储的格式比如说关系型数据库、面向对象数据库、磁盘文件等。(2)DAO的具体实现可以通过工厂模式实现抽象DAO或者利用工厂方法模式实现DAO。在本项目中,采用普通的JavaBean类来实现DAO。(3)基于Hibernate框架的DAO组件的设计由于本项目在数据访问层的技术选用方面是采用Hibernate框架,因此对数据库的连接使用Hibernate框架中的hibernate.cfg.xml来进行数据库方面的参数的配置。本项目在DAO组件层提供了一个HibernateDAOInterface接口以及对该接口实现类HibernateDAOBean。当然,对本项目中的DAO组件的设计,也可以采用分离的原则-将对用户信息的数据访问和对BBS信息的数据访问设计为两个不同的DAO组件。4、值对象(Value Object)模式和传输对象模式(DTO-Data Transfer Object)在本项目中的应用(1)值对象(Value Object)前面在业务层组件设计中所涉及的各个业务实体类,以及在数据访问层中所涉及的各个持久类,其实就是值对象。利用值对象可以封装数据库表或者其它业务数据,同时对成批数据可以采用值对象的集合(如Vector或者ArrayList)来表示。(2)传输对象模式-DTO通过减少在分布式通信过程中所产生的消息个数-通常这里所指的通信是在客户端(浏览器)层和Web服务器层或者Web服务器层和数据库服务层之间,从而提高数据交换的效率。在一个远程调用中,一个单一值对象可以被用来取出一系列相关数据并提供给客户。因此,所应该注意的是:为了能够使值对象成为DTO,该值对象的类必须实现Serializable接口public class BBSInfoVO implements Serializable(3)基于Hibernate的JOPO对象由于本项目在数据访问方面采用Hibernate技术来实现,而根据Hibernate的O/R Mapping的技术,将数据库表中的数据转换为Object-也就是我们的JOPO对象。因此,在本项目中还提供对JOPO的设计。主要有下面的各个PO类,如BBSInfo、BBSReplyInfo、BBSTitle、RoleInfo和UserInfo共五个PO类。5、事务处理 (1)JDBC中的事务处理方式l 缺省事务处理方式为了确保对数据操作的完整和一致,在程序设计时要充分考虑到事务处理方面的问题。在JDBC中怎样将多个SQL语句组合成一个事务?在JDBC中,打开一个连接对象Connection时,缺省是auto-commit模式,每个SQL语句都被当作一个事务,即每次执行一个语句,都会自动的得到事务确认。为了能将多个SQL语句组合成一个事务,要将auto-commit模式屏蔽掉。 l 自定义自己的事务处理要求在auto-commit模式屏蔽掉之后,如果不调用commit()方法,SQL语句不会得到事务确认。在最近一次commit()方法调用之后的所有SQL会在方法commit()调用时得到确认。 (2)本项目中的事务处理的设计l 在本项目中将可以应用 基于Hibernate框架中的事务处理的应用在本项目中由于在数据访问上采用了Hibernate框架,因此在事务处理的具体实现方面,当然可以采用Hibernate框架中的事务处理的支持。 基于Spring框架中的事务处理的应用为了在事务处理方面能够得到进一步的简化,我们也可以应用基于Spring框架中的事务处理技术的实现-在 Spring中对基于Hibernate框架中的事务处理进行包装,采用声明方式的事务处理技术的实现。l 本项目中最后实际所采用的事务处理的设计在设计方面,计划将事务管理推迟到Service组件的方法,而不是DAO组件的方法。只有对业务逻辑方法添加事务才有实际的意义,对于DAO方法(基本的CRUD操作)添加事务操作是没有太大实际意义的。据此将采用基于Spring框架中的声明式的事务处理技术来实现本项目的事务处理。并且规定,对于query、list、show、get和find等开头的数据查询方法采用PROPAGATION_REQUIRED,readOnly级的事务定义;而对于set、save、update、remove和delete等开头的数据修改方法采用PROPAGATION_REQUIRED级的事务定义。6、数据库表中的数据缓存的问题可以应用OSCache(http:/www.opensymphony.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论