一步一步做项目(20)详细设计
- SSH简介
- managePublicNotice用例的设计模型
- 分析模型评估
- 对系统构架约束进行评审
- 构架方面的决策和约束
- 将设计应用于用例
- 评估设计方案
- 实现工作流
有了软件需求(请参考一步一步做项目(1)软件需求),针对项目需求进行了分析(请参考一步一步做项目(13)managePublicNotice用例的分析模型),完成了系统架构设计(请参考一步一步做项目(19)架构设计),就需要进行详细设计,完成算法设计,进行编码实现前的最后的设计。
SSH简介
SSH是Struts+Spring+Hibernate的一个集成框架,是流行的一种Web应用程序开源框架。
集成SSH框架的系统从职责上分为四层: 表示层、业务逻辑层、数据持久层和域模块层 ,可以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。
更深入的理论,这里不准备介绍,后面会逐步补充。
由SSH构建系统的基本业务流程是:
1、在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(struts-config.xml)将ActionServlet接收到的Request委派给相应的Action处理。
2、在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。
3、在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。
采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。
managePublicNotice用例的设计模型
根据前面的分析,系统采用SSH框架技术,因此,其设计工作可以很自然地分为四个部分:
model包
dao包
service包
action包和web页面
分析模型评估
要详细评估managePublicNotice用例的分析模型(请参考一步一步做项目(13)managePublicNotice用例的分析模型),主要考查其类图、用例图,分析类之间的关系,考虑如何去实现它,这里就不再赘述。
对系统构架约束进行评审
对整个系统来说,采用SSH技术来实现。service包包含系统的控制类,依赖于Spring技术,采用该技术来协调。dao包包含系统对实体的访问控制,与model包(简单的实体类对象,不处理实体访问)一起,依赖于Hibernate技术。action包包含系统的界面控制,依赖于Struts2技术。另外,系统构架还禁止action包中的类直接与dao包中的类发生关系,那么,可以将所有对信息或服务的请求委派给service包中的控制类。这样,在包依赖关系图中表现的就是从action到dao之间不存在直接的依赖。这些依赖关系如下图所示。
请注意:这里,action,service,dao等包都有到model包的依赖,而model包事实上只是简单的POJO类,不进行如何信息处理,其主要作用是用作类型来用。
不论是“manage…”用例,还是其他用例,都采用同样的处理机制,分层解决问题,便于决策,这里就不再赘述。
构架方面的决策和约束
在进行JavaEE开发的过程中,框架技术起到了积极地推动作用,使用框架技术可以避免一些错误的发生,提高开发效率。
SSH将开发人员能做的决定限制到了一个相当狭小的范围内。
SSH框架是基于传统J2EE框架的新技术,SSH框架继承了J2EE的分层架构模式,二者的不同之处仅在于层与层之间的实现方法。
SSH框架在业务对象的的平台专用性上没有特殊的限定要求,在SSH框架中业务逻辑的实现通过普通的Java对象即可完成。
SSH组合框架技术优势体现在四个方面:
一、分离了Java代码和HIML代码,降低了对开发人员要求的复合度。
二、是系统的层与层之间的工作相是对独立的,代码耦合度低。
三、即使脱离了Spring 环境的AOP机制,也不会妨碍AOP实现业务的功能。
四、与SSH配合使用的Hibemate等跨平台技术开源性极强促使了SSH框架的飞速发展。
SSH的技术优势使得采用SSH框架技术开发的系统具备了很强的可拓展性、可移植性。同时,采用开源的SSH框架能够大大简化系统开发的复杂度,缩短系统开发时间。
使用SSH框架技术,使我们在进行软件开发的时候,可以不考虑具体的其他方面的问题,例如,选用什么数据库,这完全可以边开发边选择,不会对项目造成影响;而且,使用SSH框架技术,我们开发的系统,就是采用自然分层的机制,就是一个分层的系统,层与层之间的脉络清晰,关系明确,也大大降低了我们进行设计决策的难度,便于进行系统的设计与开发。
将设计应用于用例
对于采用SSH框架技术来进行开发的系统,设计作用体现在一些细节的处理上,其中的问题是如何构建一个更易修改的代码基,能够在此基础上,将相应的机制应用与其他的“manage…”用例中。
请注意:在这个类图中,没有表现细节,即没有表明类应该有的属性和方法,不是不需要,而是,在这里主要展示其关系,所以,细节就屏蔽了,本章的最后有带有详细细节的类图。
这里用jsp来表示基于jsp技术构造的用户界面,可以很方便地和Struts2技术进行交互,这也是Struts2技术的目标所在,其基本的类图展现了系统的基本构成,那么,这些类如何协作,完成用例的,其顺序图如下图所示:
在managePublicNotice用例中,要进行CRUD操作,那么createPublicNotice的顺序图如下图所示:
retrievePublicNotice的顺序图如下图所示:
updatePublicNotice的顺序图如下图所示:
deletePublicNotice的顺序图如下图所示:
可以从这些消息得到类该有的方法。
其他的“manage…”用例的设计和managePublicNotice用例的设计类似,这里不再赘述。
评估设计方案
性能和可靠性。 根据SSH的优势,尽量做到扬长避短,实现了对性能和可靠性方面的设计目标。再次评审所有的顺序图,可以确信远程连接的次数减到最小,对“manageApplyForTheCollege”用例来说,访问数据时最重视的是访问速度,该用例是所有用例中性能要求最高的一个。
重用。 在系统中,实现了分层设计和重用。层和层之间关系明确,封装良好。因而,对于机构中将会出现的新的系统来说,这些类具有很高的重用性,可以很容易在现有的基础上进行扩展。
实现工作流
下面的类图,就展现了设计阶段的类设计细节,应该足够详细,便于实现,便于CASE工具产生代码框架,如下图所示:
需要实现jsp页面,也就是要完成CRUD操作对于的页面代码,如下图所示:
其他用例的设计和实现与managePublicNotice用例相似,因此,一旦完成了managePublicNotice用例的设计和实现,就可以以此为模板来处理系统的其他功能,当然,前提是managePublicNotice用例的设计和实现要考虑到扩展性的问题,便于修改。
如果你是按照我前面介绍的方法来处理你的系统的,应该可以很方便地扩展和修改的。