浅谈MVC模式
2018-05-14彭诗媛阚洪
彭诗媛 阚洪
摘要:MVC是一种源于桌面程序的架构模式,它的基本思想是把程序界面和业务逻辑分开,这样便于软件的后期维护,同时也方便开发时期分工及管理,MVC有很多优点所以现在已经被广泛地应用于web开发中。本文将介绍MVC模式的概念,并对各个层次的功能进行详细的描述以及阐述MVC模式的处理过程和总结MVC模式的优缺点。
关键词:MVC;视图;模型;控制器
一、 MVC模式概念
MVC的英文全称是Model-View-Controller。它的核心思想是有效地组合“视图”,“模型”和“控制器”。
在这种模式中,Servlet用来处理请求的事务,充当了控制器(Controller即“C”)的角色,Servlet负责响应客户对业务逻辑的请求并根据用户的请求行为,决定将哪个JSP页面发送给客户。JSP页面处于表现层,也就是视图(View即“V”)的角色。JavaBean则负责数据的处理,也就是模型(Model即“M”)的角色。
Servlet+JSP+JavaBean(MVC)模式适合开发复杂的web应用,在这种模式下,Servlet负责处理用户请求,JSP负责数据显示,JavaBean负责封装数据。Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式。
二、 视图(View)
视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接受用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。
对于Web应用来说,可以概括为HTML界面,随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。
对于基于请求/响应方式的主体。模型表示业务数据和业务逻辑。一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。
三、 模型(Model)
模型是应用程序的主体部分。模型表示业务数据和业务逻辑。就是业务流程/状态的处理以及业务规则的制定。一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。
业务流程的处理过程对其他层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。我们可以用对象编程来做比喻,MVC定义了一个顶级类,告诉它的子类你只能做这些,但没法限制你能做这些。这点对编程的开发人员来说非常重要。
业务模型还有一个很重要的模型那就是数据模型。数据模型主要是指實体对象的数据保存。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。
四、 控制器(Controller)
控制器接受用户的输入并调用模型和视图去完成用户的需求。当Web用户单击Web页面中的提交按钮来发送HTML表单时,控制器接受请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。
划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。例如,用户点击一个链接,控制层接受请求后,并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。
五、 MVC的处理过程
首先用户通过视图层发出请求,接着控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器将处理后的数据传递给视图层,并通过视图层更新显示。
六、 MVC的优点
(一) 耦合性低
所谓耦合性就是模块代码之间的关联程度。利用MVC框架使得View(视图)层和Model(模型)层可以很好地分离,这样就达到了解耦的目的,所以耦合性低,减少模块代码之间的相互影响。
(二) 可扩展性好
由于耦合性低,添加需求,扩展代码就可以减少修改之前的代码,降低bug的出现率。
(三) 模块职责划分明确
主要划分层M,V,C三个模块,利于代码的维护。
七、 MVC的缺点
1. 由于实施MVC模式过程而产生的开销。设计MVC模式需要有经验的分析人员对系统进行分析;类的数量及文件数量的增加。采用MVC模式设计会增大应用程序的代码量。
2. 由于设计MVC模式时分析不够,设计不当而引起相反的效果,把属于一个模块的分开,把不相干的模块聚在一起。对属于一个实体不同方面的严格区分导致了一个紧凑结构,使得测试和维护的工作量大幅度增加,每一次变动牵涉到许多本不相干的模块的变动。
八、 总结
通过对MVC的探讨,我们知道它是用来分割页面和数据库访问的框架,降低了两者的耦合度,同时通过Controller的控制,也使系统更加的灵活,使我们的代码更健壮,复用性更强,但是凡事都有他适用的范围,我们不能觉得它好,就瞎用,有时可能会适得其反,因此MVC的学习还需要我们以后慢慢探讨。
参考文献:
[1]孙琦.浅议MVC设计模式[J].科技信息:科学·教研,2007(16):74.
[2]李谱华.浅析MVC设计模式及其应用[J].科技信息,2010(16):662-663.
[3]刘方军.基于MVC三层架构模式的研究与应用[D].广东工业大学,2011.
作者简介:
彭诗媛,阚洪,重庆市,重庆工程学院。