摘 要: 讨论了软件体系构架的重要性和意义,及其在项目开发中的典型应用。
关键词: 软件体系构架; 管道; 过滤器; J2EE
20世纪60年代,“软件危机”爆发后,人们开始重视对软件工程的研究。这些研究成果为提高软件生产质量和软件生产效率提供了大量的、具有极高指导意义和参考价值的理论基础。但随着软件系统规模越来越大、越来越复杂,人们注意到,仅是对软件结构和算法的设计,已不能达到令人满意的效果,一个好的软件体系构架显得更为重要。在这种背景下,对软件体系构架的研究如雨后春笋般出现了,并在实际应用中得到了认可。
在特定环境中重复出现的、具有相同本质的问题,及其解决方案我们称为模式。它是通过经验获取的,以某种结构化的格式书写下来,存在于不同的抽象层,避免了遇到相同的问题重头设计,是可重用的产物,可以被组合起来解决更大的问题。存在各种范围和抽象程度的模式,构架也是存在模式的。
目前,软件设计的一个核心问题就是能否使用重复的体系构架,即达到体系构架级的软件重用。也就是能否在不同的软件系统中,采用同一种体系构架。基于此目的,许多专家开始研究软件体系构架的模式问题。在Pattern2Oriented SoftwareArchitecture (面向模式的软件体系构架)中首次提出了八种体系结构模式:层(Layers) 、管道和过滤器( Pipes and Filter) 、黑板(Blackboard) 、代理者(Broker) 、模型- 视图- 控制器(Mo2del2View2Controller) 、表示- 抽象- 控制( Presentation2Abstrac2tion2Control) 、微核(Microkernal) 、映像(Reflection) 。
1 管道和过滤器体系构架模式
1. 1 管道和过滤
管道和过滤器模式是专门为处理数据流提供的一种模式。它是由过滤器和管道组成,每个处理步骤都被封装在一个过滤器组件中,多个过滤器相连,可以形成过滤器链,数据流通过相邻过滤器之间的管道进行传输。每个过滤器功能单一,可以单独修改,并且链中的过滤器之间的排列顺序可根据需求,进行配置。这种体系结构模式具有如下特征:
(1)每个过滤器组件是个独立的部件,除了输入流和输出流外,过滤器之间互不影响,因此,过滤器之间是不共享任何状态信息的。
(2)每个过滤器对其上游和下游连接的过滤器是无知的,它的实现和使用不对链中的任何过滤器加以限制。
如上所述,管道和过滤器模式具有组件独立性强、可重用性高、配置重组组件灵活方便等优点,适合作专门对数据流进行预处理、处理的软件开发模型。
1. 2 J 2EE中的Se rvle t Filte r技术
Servlet 2. 3提供的Filter是管道和过滤器体系构架在J2EE中的具体应用。通过使用Filter为Web应用开发者能够在请求到达Web资源前截取请求,进行相应处理;同理,也能够在请求资源反馈之前,截取响应进行处理,将处理后的结果反馈给客户端。因此, Filter为某些处理非常复杂的问题,提供了很好的解决方案。Filter的工作机制如图1所示。

1. 3 在项目开发中的应用
利用过滤器可以预处理请求的特性,我们为信息服务平台设计了一个网站访问信息采集模块,用来跟踪登录网站用户的一些基本信息,如登录IP地址、时间、访问过的栏目、页面及文章等,为网站的访问统计采集原始数据。
信息采集模块由过滤器组件( rstFilter) 、监听器组件( rst2L istener)和用户访问信息组件( rstL ist)三部分组成。信息采集过程主要在过滤器组件的doFilter ( )方法中进行采集,并利用用户信息组件暂存用户访问信息,通过监听器组件在会话销毁时,将用户访问信息存入数据库,以备统计。整个过程用Ra2tional Rose的Sequence框图表示,如图2所示。

另外,利用Filter我们还可以实现以下功能:
(1) 身份验证和授权过滤器。在客户端的请求响应之前,进行身份验证和授权。
(2) 加密解密过滤器。在客户和服务器端,实现加密和解密功能,且只要更改过滤器就可以更改加密算法。
(3) 压缩和解压缩过滤器。在客户和服务器端,实现压缩和解压缩功能。
(4) 转换过滤器。可根据客户端的不同,把相同内容转换成不同的显示方式展现给不同的用户,如手机用户和PC机用户浏览相同的网页内容,就需要根据客户端浏览器的不同,生成相应格式的数据,发送给客户端用户。
(5) 日志记录和审核过滤器。记录客户端发送的请求信息,以度量资源的访问量及网络的传输量,或执行访问资源的限额。
2 MVC体系构架模式
2. 1 MVC构架模式
MVC (模型- 视图- 控制器)最初是在Smalltalk280 中被用来构建用户界面的。MVC设计模式把应用分成三部分,其中,模型封装了应用程序的数据结构和事务逻辑,集中体现了应用程序的状态。视图实现模型的外观,它是应用程序的外在表现,当模型发生变化时,它会得到通知,反映模型的变化。控制器定义用户界面对用户输入的响应方式,负责把用户的动作转成针对Model的操作。通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现,使得软件可维护性、可修复性、可扩展性、灵活性以及封装性大大提高了。实践证明,它已成为在适合开发C /S程序和Web应用的框架模式。
2. 2 J 2EE中的MVC构架
J2EE将大型企业级应用系统划分为多层,一般为客户层、表示层、业务逻辑层和数据层。每一层都有相应的技术提供支持。多层结构系统具有良好的可拓展性、可维护性和稳定的系统质量,同时,可以提高软件的可重用性,节省项目的开发时间。在开发中,具体采取几层构架,可根据系统的业务繁简程度灵活运用。
MVC构架中值得一提的是Struts框架,它对Model, View和Controller都提供了对应的实现组件,采用的主要是J2EE中的Servlet, JSP和Tag L ibrary技术。应用程序一般使用JSP代码生成用户界面,这些代码不包括任何商业逻辑,代表了MVC中的视图部分,由控制器ActionServlet实例接收和处理相关用户交互请求。ActionServlet实例将选择和调用相应的Action类来处理商业逻辑。在设计模式上, Action类被称为控制辅助者,它将修改ActionForm,这些ActionForm就是MVC中的模型部分。
Struts框架技术可以很好地实现显示逻辑和业务逻辑的分离,减少数据表达、数据描述和应用操作的耦合度。
2. 3 项目开发中的应用
鉴于本信息服务平台的某些部分,不涉及复杂业务逻辑,所以不适合采用EJB,而Struts框架技术不仅可以处理简单的业务逻辑,而且可以很好地实现显示逻辑和业务逻辑的分离,且具有组件的模块化、灵活性和重用性等优点。因而对需要与客户端交互的模块,我们采用Struts框架结构,如主席信箱模块。此模块主要负责收集公众对政府工作的意见、建议等交互信息,并负责提交给相应负责人进行处理并发布。利用Struts模型不仅便于后期维护,还有利于在项目小组内按照小组成员各自的擅长进行分工,三个部分并行开发,加快项目开发进度。
在设计主席信箱公共信息提交表单时, Struts核心模块已为我们提供了通用的控制器组件ActionServlet,我们只需要编写控制辅助者组件Action,ActionForm两个类和表单信息的验证文件,最后在struts2config. xml中配置Action,ActionForm,Ac2tionMapp ing,ActionForward,Message2resources等信息。
当客户端发出请求时, ActionServlet利用配置信息中的ActionMapp ing对象把请求映射到Action处理器对象。另外控制器组件也负责用相应的请求参数填充ActionForm,由Action2Form进行表单参数的有效性检验,然后ActionForm将作为参数传递给Action的perform ( )方法,在此,将客户端提交的内容存入数据库,实现表单的处理。该方法结束后会返回一个Ac2tionForward对象。控制器组件接着从这个对象中获取下一个视图的路径和重定向属性,返回给用户。处理流程如图3所示。

3 结束语
随着软件规模的不断扩大和新的商业模式的不断涌现,必然会出现更多、更大的应用系统。如何设计这些系统的体系结构,使软件开发达到更快、更好、更便宜。实践证明,最主要的是运用软件复用的思想,使软件的体系结构更合理,开放。需求永远会比技术和设计思想发展快,要使将来系统的升级所付出的代价最小,研究软件系统的体系构架还是非常有用和有必要的。
上海联兵环保科技有限公司
地址:上海市松江区工业区茸北分区茸阳路69号
总机:021-51691929
传真:021-57784244
免费电话:400-600-5030
技术支持:13641659499
E-mail:zhanglianbing@126.com
http://www.shlbhb.com