工作任务管理系统中的软件模式应用

(整期优先)网络出版时间:2009-03-13
/ 2

工作任务管理系统中的软件模式应用

熊松泉吴琼

关键词:设计模式MVC单例模式页面控制器

0引言

软件项目开发的一个难点是用户需求的变化导致后期功能代码的扩展和维护,软件项目管理的一个难点是团队成员间的协作和沟通。设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编写的、代码设计经验的总结。遵循设计模式的解决方案,有助于功能的扩展和代码的维护。设计模式是面向对象程序设计的精华,让对象和对象的关系清晰了起来,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式是按场景进行分类,便于团队间的沟通。本文以工作任务管理系统为例,讨论几种常用软件模式在信息管理系统开发中的应用。

1设计模式分析

1.1MVC模式MVC是个将一个应用的实现分成三个组件角色的框架技术:模型,视图和控制器。①在基于MVC的应用里,Model(模型)是负责保持状态的应用组件。这个状态通常都持久于数据库之中(譬如,我们也许会有一个Product(产品)类用来代表SQL中的Products数据表中的订单数据)。②在基于MVC的应用里,View(视图)是负责显示用户界面的组件。这个UI通常是使用模型数据来创建的(譬如,我们也许会生成一个Product“编辑”视图,根据当前Product对象的状态,显示文本框,下拉框和复选框等)。③在基于MVC的应用里,Controller(控制器)是处理用户交互,操作模型和最终选择用哪个视图来显示UI的组件。在MVC应用中,视图只是用来显示信息而已,是控制器来处理和回应用户的输入和交互的。使用MVC方法的一个好处是,它有助于促进应用中模型,视图,控制器间的关注的清晰分离。保持关注的清晰分离使得对应用的测试极其容易,因为不同应用组件间的契约的定义和表达是更明确的。

1.2页面控制器使用页面控制器模式接受来自页面请求的输入、调用请求对模型执行的操作以及确定应用于结果页面的正确视图。分隔调度逻辑和所有视图相关代码。如果合适,创建用于所有页面控制器的公用基类,以避免代码重复并提高一致性和可测试性。页面控制器可接收页面请求、提取所有相关数据、调用对模型的所有更新以及向视图转发请求。而视图又将根据该模型检索要显示的数据。定义独立页面控制器将分隔模型与Web请求细节(例如会话管理,或使用查询字符串或隐藏表单域向页面传递参数)。

1.3单例模式单例模式的特点:①单例类只能有一个实例;②单例类必须自己创建自己的唯一实例;③单例类必须给所有其它对象提供这一实例。

Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,确保用户无法通过new直接实例它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance方法负责检验并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。

2工作任务管理系统的设计模式应用

2.1工作任务管理系统体系结构工作任务管理系统的体系结构如图1所示,图中的箭头表明了信赖关系。在物理上,DAL是公共的数据访问入口层,BLL用来封闭业务实体对象,BIN是经过编译后的逻辑控制代码,Web文件夹下是按功能划分的视图文件。用户与《View》下的视图文件进行交互,控制数据的显示和接受用户的输入;《View》中的数据来源于《Controller》,《Controller》负责维护《View》的状态和数据的呈现,以及将《View》传递过来的数据对象化,并调用对象方法实现相应的业务逻辑获得数据;《Model》中包含实体的集合,对应于业务规则,是数据库表数据和数据增、删、改、查操作的抽象,实体以类的形式存在,业务以类方法的形式进行实现,《Model》从业务规则的层面处理数据,它是《Controller》数据的供应商。

工作任务管理系统中使用了MVC结构后,在开发时,项目组成员间职责明确,美工和网页设计师只需要关注《View》的设计和HTML实现;数据库设计人员只需要关心数据库的设计以及数据的转换规则;模型人员只需要从业务的角度关注业务规则的实现和从数据库到实现对象的转换工作;而程序只需要关注利用模型的业务规则控制处理《View》的数据显示和输入就可以了。这样做,非常有利于项目的管理和分工协作。

另外,到了开发的后期,需求分析的变化,导致业务规则的重整,只需要在现在代码基础上增加一些实体类就可以了,便于系统的扩展。

2.2页面控制器在工作任务管理系统中,《View》分为两种,一种是无需授权任何人都可以访问的页面,称之为通用页;一种是需要用户登录,特定用户才有权访问的页面,称之授权页。《View》只是简单的以HTML的方式显示,由浏览器解析,否能访问由页面控制器来控制的,即《View》对应的后台代码。在默认情况下,所有的布面控制器都继承于System.Web.UI.Page类,要实现权限控制必须在所有的页面控制添加控制代码,这用做非常的麻烦,而且不利于代码的后期修改和扩展。针对于这种需求,页面控制器设计模式提供了一种非常好的解决方案,如图2所示。

定义一个基类BasePage,继承于System.Web.UI.Page,是系统中所有页面控制器的基础;从BasePage下派生出GenPage和AuthPage两个类,分别用作于通用页和授权页的父类。在授权页的构造函数中,实现OnLoad事件的订阅,在OnLoad的事件处理程序中添加权限控制代码,所有的授权页都从AuthPage派生出来,这样在派生页控制器中,就无需写权限控制代码了。在后期代码的扩展过程中,只需有修改父类的代码就可以,而不是每个页控制器的代码。

2.3单例的数据连接对象数据连接是系统中非常宝贵的资源,如果一个数据库系统中存在着多个连接对象,并且这些对象没有及时释放,系统的性能将会急剧下降。一个好的设计是,在一个系统中数据连接应该是唯一的,单例的,如图3所示。Cnn是DBAccess的一个静态成员,并在静态构造函数实例化。这样,不论DBAccess有多少个对象,数据连接对象便只有一个了。

3结论

设计模式是设计经验的总结,在系统设计过程中合理地使用一些经典的设计模式,是十分有利于系统功能的扩展和代码复用的。在工作任务管理系统中,MVC模式使得系统的结构清晰,有利团队的分工合作;页面控制器模式降低了代码的冗余度,提高了代码的重用性,方便了功能的扩展;单例模式实现了数据连接的唯一性,提高了系统的性能。

参考文献:

[1]钟金琴,辜丽川.一种面向对象的软件设计模式库的设计.计算机技术与发展[J],2008.(9):22.

[2]Microsoft,表示层设计模式:PageController(页面控制器)[OL].http://www.uml.

org.cn/sjms/200812302.asp,2008-12-30.