艾伟_转载:[一步一步MVC]第六回:什么是MVC(上)?

简介: 本系列文章导航[一步一步MVC]第一回:使用ActionSelector控制Action的选择[一步一步MVC]第二回:还是ActionFilter,实现对业务逻辑的统一Authorize处理[一步一步MVC]第三回:MVC范例大观园[一步一步MVC]第四回:漫谈ActionLink,有时“胡搅蛮缠”[一步一步MVC]第五回:让TagBuilder丰富你的HtmlHelper[一步一步MVC]第六回:什么是MVC(上)? 引言所谓MVC,其实就是M、V、C而已。

本系列文章导航

[一步一步MVC]第一回:使用ActionSelector控制Action的选择

[一步一步MVC]第二回:还是ActionFilter,实现对业务逻辑的统一Authorize处理

[一步一步MVC]第三回:MVC范例大观园

[一步一步MVC]第四回:漫谈ActionLink,有时“胡搅蛮缠”

[一步一步MVC]第五回:让TagBuilder丰富你的HtmlHelper

[一步一步MVC]第六回:什么是MVC(上)?

引言

所谓MVC,其实就是M、V、C而已。归根揭底,MVC是一种表现模式,是一种软件架构模式。其中有几个重要的概念:

  • M,Model, 引用系统数据,管理系统功能并通知View更改用户操作。
  • V,View,就是用户接口,用于显示数据。
  • C,Controller ,将用户操作映射到Model,并操作视图。
  • R,Routing ,MVC的奥秘在于通过Routing实现了对URL的路由选择,完成了上述3个基本概念的基础逻辑。

我们先来了解这几个概念之间的联系。

 

o_anytao-mvc-09-01[1]

对MVC而言,分离是最大的优点,尤其是Model将不依赖于Controller和View,对于隔离应用、进行UI测试打下很好的架构级支持。

MVC Execution Process

关于MVC的执行过程,我们就不多言了,从MSDN获取的执行过程可以被解析为:

o_anytao-mvc-09-02[1] 

在MVC模式下,不同于WebForm时代,业务逻辑的处理和HTML的输出不是View(或Page)一个人的事儿,这些逻辑被清晰的分解为M、V和C的逻辑,具体的执行流程为:

ASP.NET MVC Execution Process

Stage

Details

Receive first request for the application

In the Global.asax file, Route objects are added to the RouteTable object.

void Application_Start(object sender, EventArgs e) 
{
    RegisterRoutes(RouteTable.Routes);
}
public static void RegisterRoutes(RouteCollection routes)
{
    routes.Add(new Route
    (
         "Category/{action}/{categoryName}"
         , new CategoryRouteHandler()
    ));
}

Perform routing

The UrlRoutingModule module uses the first matching Route object in the RouteTable collection to create the RouteData object, which it then uses to create a RequestContext object.

 

Create MVC request handler

The MvcRouteHandler object creates an instance of the MvcHandler class and passes the RequestContext instance to the handler.

Create controller

The MvcHandler object uses the RequestContext instance to identify the IControllerFactory object (typically an instance of the DefaultControllerFactory class) to create the controller instance with.

Execute controller

The MvcHandler instance calls the controller's Execute method.

Invoke action

For controllers that inherit from the ControllerBase class, the ControllerActionInvoker object that is associated with the controller determines which action method of the controller class to call, and then calls that method.

Execute result

The action method receives user input, prepares the appropriate response data, and then executes the result by returning a result type. The built-in result types that can be executed include the following: ViewResult (which renders a view and is the most-often used result type), RedirectToRouteResult, RedirectResult, ContentResult, JsonResult, FileResult, and EmptyResult.

我就不翻译了,反正很好理解。

优点和优点

我们不说废话,先对MVC与传统ASP .NET WebForm application进行一番比较。

MVC

  • 通过model、view和controller有效的简化了复杂的架构,体现了很好的隔离原则。
  • 一切皆可测试。
  • 一切皆可扩展:ViewEngine、HtmlHelper还有Filter。
  • 适用于大型架构开发。
  • 强类型View实现,更安全、更可靠、更高效。
  • 开源,意味着更好的控制和理解。
  • 没有View State,没有Server Control,这显然是个好处。

WebForm

  • 支持事件驱动模型开发,拖拽即可形成应用,简单易懂。
  • 可以应用MVP模型,为每个page添加功能。
  • 应用ViewState和Server Control,显然也是优点。
  • 适用于快速开发。

本文仅仅是个简单的介绍,关于什么是MVC这个话题,还有很多东西,我们下回再见吧。

参考文献

目录
相关文章
|
druid 前端开发 关系型数据库
mysql使用druid时自动断开连接解决方案
mysql使用druid时自动断开连接解决方案
424 0
|
11月前
|
人工智能
初涉歌词创作:写歌词的技巧和方法你知道多少,妙笔生词智能写歌词软件
对于初涉歌词创作的人来说,掌握关键技巧和使用“妙笔生词智能写歌词软件”能大大提升创作效率。该软件提供AI智能写词、押韵优化、歌词续写等功能,帮助捕捉灵感,明确主题,优化结构,使语言表达更加简洁生动,助你创作出感人至深的作品。
|
10月前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
1164 7
|
11月前
|
人工智能 自然语言处理 IDE
|
关系型数据库 分布式数据库 数据库
PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。
【7月更文挑战第3天】PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。通过数据分片和水平扩展支持微服务弹性,保证高可用性,且兼容MySQL协议,简化集成。示例展示了如何使用Spring Boot配置PolarDB,实现服务动态扩展。PolarDB缓解了微服务数据库挑战,加速了开发部署,为云原生应用奠定基础。
562 3
|
人工智能 PyTorch TensorFlow
分布式训练:大规模AI模型的实践与挑战
【7月更文第29天】随着人工智能的发展,深度学习模型变得越来越复杂,数据集也越来越大。为了应对这种规模的增长,分布式训练成为了训练大规模AI模型的关键技术。本文将介绍分布式训练的基本概念、常用框架(如TensorFlow和PyTorch)、最佳实践以及可能遇到的性能瓶颈和解决方案。
1407 2
|
11月前
|
Shell PHP
Shell echo命令
10月更文挑战第3天
96 0
|
安全 数据安全/隐私保护
Elasticsearch 7.* 常见错误以及解决方案
Elasticsearch 7.* 常见错误以及解决方案
583 0
|
存储 缓存 并行计算
【软件设计师备考 专题 】CPU和存储器的组成、性能和基本工作原理
【软件设计师备考 专题 】CPU和存储器的组成、性能和基本工作原理
293 0
|
JSON JavaScript 前端开发
Elementui Tree 树形控件删除功能
Elementui Tree 树形控件删除功能
254 0
Elementui Tree 树形控件删除功能