APP下载

初探ASP.NET MVC设计模式

2018-12-28侯永刚

科学与财富 2018年30期
关键词:设计模式视图控制器

侯永刚

摘要:MVC是一种软件架构的思想,该设计模式目前在很多领域都有着广泛的应用前景,2009年,ASP.NET MVC1.0正式版上市,到目前已发展到了MVC5。ASP.NET MVC非常强调“关注点分离”的概念,而且从开发上来看就很容易让开发人员做到“关注点分离”,这个优势是Web Form完全无法匹敌的。本文简要阐述了ASP.NET MVC设计模式的概念,基本思想及其应用。

关键词:设计模式;ASP.NET MVC;MVC;控制器;视图

一、MVC设计模式概述

MVC不是一种程序语言,严格说起来也不算是个技术,而是开发时所使用的一种“架构(框架)”。它就像是一种开发观念,或是一个存在已久的设计模式。

MVC最早是在1979年由Trygve Reenskaug所提出,并且应用于当时火红的Smalltalk程序语言中。之所以会提出MVC的概念,主要目的就在于简化软件开发的复杂度,以一种概念简单却又权责分明的架构,贯穿整个软件开发流程,通过“商业逻辑层”与“数据表现层”的切割,让这两部分的信息切割开来,用以撰写出更模块化、可维护性高的程序代码。

MVC是一种软件架构的思想,将一个软件按照模型、视图、控制器进行划分。其中,模型用来封装业务逻辑,视图用来实现表示逻辑,控制器用来协调模型与视图(视图要通过控制器来调用模型,模型返回的处理结果也要先交给控制器,由控制器来选择合适的视图来显示处理结果)。

模型:负责定义信息格式与信息访问的界面,包括商业逻辑与信息验证。

视图:负责用户界面(UI)相关呈现,包括输入与输出。

控制器:负责控制系统运行的流程、跟浏览器如何交互、决定网页操作的流程与动线、响应客户端的各种要求、错误处理。

二、初探ASP.NET MVC

ASP.NET WebForm时,常用的开发模式也将整个应用程序分解为三个层次分别是表示层、事务层、数据访问层,那么ASP.NET MVC的三层与原三层架构的关系是什么呢?

ASP.NET MVC仅仅是对原三层架构中的表示层进行解耦,主要实现HTML与C#代码的分离。因此,其三层的功能主要如下:

View:视图层,负责所有呈现在用户面前的东西,最简单的说法就是输出与输入。输出工作就是呈现在浏览器上的界面,例如HTMl等;输入工作就是将用户输入的数据传回服务器,例如,在浏览器上呈现表单让用户输入。

Model:模型,负责定义信息格式,对应应用状态和业务功能的封装,可以将它理解为同时包含数据和行为的领域模型(Domain Model)。Model接受Controller的请求并完成相应的业务处理。

Controller:控制器,接收用户的请求、决定呈现哪个View(视图)、接收用户输入的数据。

1.控制器

MVC模式中的控制器(Controller)主要负责响应用户的输入,并且在响应时修改模型(Model)。通过这种方式,MVC模式中的控制器主要关注的是应用程序流、输入数据的处理,以及对相关视图(View)输出数据的提供。

过去的Web服务器支持访问以静态文件存储在磁盘上的HTML页面。随着动态网页的盛行,Web服务器也支持由存储在服务器上的动态脚本生成的HTML页面。MVC则略不同。URL首先告知路由机制去实例化哪个控制器,调用哪个操作方法,并为该方法提供需要的参数。然后控制器的方法决定使用哪个视图,并对該视图进行渲染。

URL并不与存储在Web服务器磁盘上的文件有直接对应关系,而是与控制器类的方法有关。ASP.NET MVC对MVC模式中的前端控制器进行了改进,路由子系统在前面,之后才是控制器。

理解MVC模式在Web场景中工作原理的简单方法就是记住:MVC提供的是方法调用结果,而不是动态生成(又名脚本)页面。

2.模型

模型这个词在软件开发领域被多次引用,代表数百种不同的概念,如成熟度模型、设计模型、威胁模型和进程模型等。很少有开发会议会自始自终都不谈一两种模型的。即便把“模型”这个术语的范围限定在MVC设计模式的上下文中,也仍然可以探讨面向业务的模型对象和面向视图的模型对象哪个更具有优势。

ASP.NET MVC中讨论的是那些发送信息到数据库,执行业务计算并在视图中渲染的模型对象。换句话说,这些对象代表着应用程序关注的域,模型就是要显示、保存、更新和删除的对象。

为了仅使用模型对象的定义就能构建出应用程序特性,ASP.NET MVC5提供了许多工具和特性。现在就应该坐下来好好想一想要解决的问题,然后为了呈现涉及的主要对象,就要编写一些简单的C#类。准备好了上面的工作,接下来就可以使用MVC提供的工具来为每个模型对象的标准索引、创建、编辑和删除功能构建控制器和视图。

3.视图

开发人员之所以花费大量的时间来重点设计控制器和模型对象,是因为在这些领域中,精心编写的整洁代码是开发一个可维护Web应用程序的基础。

但是当用户在浏览器中访问Web应用程序时,这些工作他们是看不到的。用户对应程序的第一印象,以及与应用程序的整个交互过程都是从视图开始的。

视图实际上就是应用程序的“大使”。显而易见,如果应用程序的其他部分存在错误,那么设计再好,再没有瑕疵的视图也不能弥补这方面的不足。同样,如果创建一个丑陋且难以利用的视图,那么许多用户将不会给应用程序提供证明它的功能多么强大、运行多么顺畅的机会。

控制器可以返回输出字符串到浏览器。但在一些重大的Web应用程序中,大部分的控制器操作需要以HTML格式动态显示信息。如果控制器操作仅仅返回字符串,那么就需要有大量的字符串替换操作,这样就会变得混乱不堪。因此,模板系统的需要越来越清晰,此时,视图应运而生。

视图的职责是向用户提供界面。当控制器针对被请求的URL执行完合适的逻辑后,就将要显示的内容委托给视图。

不像基于文件的Web框架,比如ASP.NET Web Forms和PHP,视图本身不会被直接访问,浏览器不能直接指向一个视图并渲染它。相反,视图总是被控制器渲染,因为控制器为它提供了要渲染的数据。

在一些简单的情况中,视图不需要或需要很少控制器提供的信息。更常见的情况则是控制器需要向视图提供一些信息,所以它会传递一个数据转移对象,叫做模型。视图将这个模型转换为一种适合显示给用户的格式。在ASP.NET MVC中,完成这一过程由两部分操作,其中一个是检查由控制器提交的模型对象,另一个是将其内容转换为HTML格式。

三、 ASP.NET MVC的开发观念

在MVC模式的开发中,应该具有正确的开发观念,强大的工具若没有正确的观念支持,就像是给你一台马力强又省油的手动档汽车,而你却不知道离合器该如何正确使用,也许在开了一段时间之后,觉得车子还是开不快。

1.常见的问题有以下几点

1)把Model理解成实体类(Entity)

在MVC中Model应该包含两部分功能,一部分是处理业务逻辑,一部分是提供View显示的数据。

它应该是业务逻辑真正的实现层。所以Model实际上是Bussiness Model(业务模型)。而Controller仅仅起一个“桥梁”作用,它负责把View的请求转发给Model,再负责把Model处理结束的消息通知View。Controller的存在是为了使UI界面、UI逻辑、业务逻辑之间分离。

2)大量业务逻辑代码堆积在Controller端

MVC的控制器,内里封装了通讯,容易变成大而全的高度耦合的集中器。比如将业务逻辑写在控制器里。

2.正确的开发观念

1)关注点分离

关注点分离的意思就是,当你在进行软件开发时,可以只关注于当前的对象上,一次仅关注于一个较容易理解与解决的部分,不要受到相同系统中其他对象的干扰,也包括对对象所做出的修正不会影响到其他对象的动作,能够专注于完成手边的工作,不但容易提升软件质量,也可加快程序代码理解的速度。

2)以习惯替换配置

以习惯替换配置是一种软件设计模式,主要目的在于减少开发人员在架构时所决策的时间以及降低软件设计过于弹性,而导致太复杂的情况,通过约定俗成的“开发习惯”,让同一群人员得以共享同一套设计架构,减少思考时间,降低沟通成本,且不失软件开发的弹性。

四、ASP.NET MVC应用中的请求处理

ASP.NET MVC开发模式不同于WebForm方式,不能直接访问视图,必须通过控制器,那么很多人可能会不理解其资源的请求处理方式,以下简要介绍其请求处理过程。

1.每个HTTP请求的目标是Controller中的一個Action,具体体现为定义在Controller类型中的一个public方法。所以对请求的处理最终体现为对目标Controller对象的激活和对目标Action方法的执行。

2.Controller的类型和Action方法的名称及作为Action方法的部分参数可以直接通过请求的Url解析出来。

3.通过一个拦截器对抵达Web服务器的HTTP请求进行拦截。这个拦截器根据当前请求解析出目标Controller的类型和对应的Action方法的名称,随后目标Controller被激活,相应的Action方法被执行。

4.Action方法执行过程中,可以调用Model获取相应的数据及改变其状态。在Action执行的最后阶段一般会创建出一个View,后者最终被转换为HTML以HTTP响应的形式返回到客户端。

5.绑定在View上的数据被称为ViewModel,来源于Model或者基于显示要求进行的简单逻辑计算。

五、总结

在软件的开发中,最常发生的问题就是需求的变化。经常改变的需求,对于软件质量与可维护性有很大的杀伤力,但这是事实,我们无法改变。而MVC设计模式以一种概念简单却又权责分明的架构,通过商业逻辑与数据表现的分离,可以撰写出更模块化、可维护性高的程序代码。本文介绍了MVC模式的基本概念;ASP.NET MVC的三个基本部件及其间关系;并对ASP.NET MVC开发的正确观念与其HTTP请求的处理过程进行了简要的介绍,便读者对ASP.NET MVC应用程序的开发有一个全面而正确的理解与认识。

参考文献:

[1]黄保翕.ASP.NET MVC4开发指南[M].清华大学出版社,2013年

[2]邹琼俊.ASP.NET MVC企业级实战[M]:清华大学出版社,2017年

[3]弗瑞曼[美].精通ASP.NET MVC5[M]:人民邮电出版社,2016年

猜你喜欢

设计模式视图控制器
“1+1”作业设计模式的实践探索
三维协同设计模式下的航天项目管理实践与展望
交通机电工程设计模式创新探讨
5.3 视图与投影
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
模糊PID控制器设计及MATLAB仿真
MOXA RTU控制器ioPAC 5542系列
倍福 CX8091嵌入式控制器