基于模型-视图-控制器的Web应用程序框架设计
扫描二维码
随时随地手机看文章
传统的web应用程序会在表现层包含管理用户交互的代码,例如:一个页面可以决定用户将要跳转的下一个页面。开发者经常把所有交互代码写在用户界面代码中。然而,开发者将页面导航代码写入页面代码后,代码会很复杂,而且难以重用、维护和扩展。对于整个应用程序来说,它的业务逻辑、控制逻辑和运行状态等都很难被重用。在很多情况下,应用程序的运行状态需要保持。但是如果状态保存在某个页面中,那么代码必须从这个页面中找回状态。这样编写出来的代码不够优雅,很难得到预想的效果,而且这些不雅的代码又影响了web页面的扩展和重用。本文基于MVC模式,提出了一个可扩展的框架,简化了对从web页面独立出来的业务逻辑代码的处理,有利于复杂的web页面导航和工作流处理的复用。
1 MVC设计模式
MVC由Trygve Reenskaug提出,首先被应用在SmallTalk-80环境中,是许多交互和界面系统的构成基础。MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好地实现了数据层与表示层的分离。MVC作为一种开发模型,通常用于分布式应用系统的设计和分析中;另外,它也可用于确定系统各部分间的组织关系。对于界面设计可变性的需求,MVC把交互系统的组成分解成视图、控制器、模型3种部件。
视图部件把表示模型数据及逻辑关系和状态的信息以特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。控制器部件主要用于处理用户与软件的交互操作,其职责是控制提供模型中任何变化的传播,确保用户界面与模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件。模型部件保存由视图显示、由控制器控制的数据;它封装了问题的核心数据及逻辑和功能的计算关系,它独立于具体的界面表达和I/O操作。
模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映出这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化一传播机制。
模型、视图、控制器三者之间的关系和各自的主要功能如图1所示。
2 应用框架
为了方便地实现业务流程控制和更改,本文根据MVC设计模式,提出了一个可扩展的框架。该框架的优点是:
1)实现了对业务流程控
制部分的包装,便于简化web应用程序的开发。使用框架开发web应用程序,只需依照页面接口编写web页面和业务逻辑,控制部分由框架根据配置文件实现。这样设计有利于页面美工与程序员的协作。
2)提高了web页面和业务逻辑的扩展和重用,便于对业务逻辑的测试,提高了系统的灵活性。
框架的结构如图2所示。Views和ViewManager是系统的视图部分,其中,ViewManager负责页面的生成与显示。Web服务和业务逻辑组件提供应用程序的业务逻辑,属于系统的模型部分。剩下的部分属于系统的控制器部分,各个部分的主要功能如下:Manager给应用程序提供一个人口,根据不同的Navigator来决定新建或加载一个任务:Navigator负责管理页面之间的跳转,根据配置文件选择合适的页面,调用ViewManager激活页面;ControllerBase和Controllers根据页面请求调用不同的业务逻辑,返回结果;State保存应用程序的状态以及当前显示的页面。
此应用框架的具体工作流程如下:在Manager中启动任务以后,实例化导航器传递适当的信息给导航器(Navigator)。导航器调用Configuration类从配置文件中取出配置信息,根据配置信息,创建视图管理器(Views Manager)。然后,Manager调用Navigator的NavigateEvent事件,获得应用程序要显示的和下一个要显示的页面。此时,可以调用State类中的Save方法,将状态保存到数据库中。另外,导航器也可以调用适当的视图管理器中的ActiveView方法,将视图名字传给视图管理器。ActiveView方法负责创建控制器,显示视图。视图显示之后,等待用户在界面中执行一个动作。如果用户执行了一个动作,就通过控制器调用业务逻辑,处理后就会将结果返回页面。
使用框架开发应用程序可以很方便地控制和改变业务流程,此时只需要修改配置文件即可;可以实现状态管理,保持页面间状态的连贯性,捕获用户与应用程序交互的状态,根据保存的状态信息,用户可以在任何时间、地点、机器继续未完成的操作。
3 面向应用框架的web程序开发
汽车4S店企业资源计划(Enterprise Resource Planning,ERP)系统业务逻辑复杂,业务流程易更改,采用本文提出的框架进行开发,结构层次清晰,便于分工协作,取得较好的效果。我们使用汽车配件采购订单模块,来说明框架的应用,其流程如图3所示。
在开发过程中,分别编写需要显示的web页面和后台业务逻辑,在配置文件中,使用view元素将页面名称与页面代码对应起来,在navigation部分编写页面的流转。如果要修改业务流程,只需修改配置文件导航部分;另外,添加页面也很方便,只需要在配置文件中增加页面节点,配置页面的流转过程即可。
部分流程配置代码如下:
通过配置文件的设置,框架可以便利地修改和扩展应用程序,实现对业务流程的控制和修改。这样,web页面和逻辑代码就可以很方便地修改和复用,应用系统也具有很强的灵活性和可扩展性。
4 结论
MVC作为一种常用的开发模型,因其实现了数据层与表示层的分离,被广泛用于分布式系统的设计和分析,应用程序的重用度高,并易于维护和修改。很多交互性愈来愈强的传统web应用程序开发(如PHP、ASP、JSP等),存在着代码较为复杂、重用度低和维护扩展难度大的问题,根据MVC思想的可扩展设计框架,可有效地提高web应用程序的开发效率。