我出了份卷子做面试题,其中之一就是要求说说ASP.NET MVC的原理。感觉太空泛了,谁能说得准呢?

但是,如果站在我这个面试官立场,面试题好多时并不要求有标准答案,可能也没有什么标准答案,主要是通过问答,了解一下面试者的理解程度,相关知识程度什么的。其实,我自己水平也不行,但因为年纪大,好像不带点人大家会觉得有点怪怪的,所以过去一段时间也参与点招聘工作。

对于ASP.NET MVC,我自己的理解是酱紫的:

MVC是一种思想。ASP.NET MVC只不过是实现了这种思想的一种开发框架。利用Web Form项目,其实也可以实现MVC。以前搞WEB FORM,我就试过MVP模式。

MVC的思想要点的在于将UI和业务逻辑、数据分离。好处一是逻辑清晰,二是有利于逻辑重用和测试。因为UI很难自动化测试,但逻辑却可以。所以说,ASP.NET MVC有利于进行单元测试。并且UI与逻辑、数据分离以后,也容易重用。比如说,在ASP.NET MVC中,不同的action可以指向同一个view。

经典的MVC中,Model是个巨无霸,包含业务逻辑和数据。controller只是一个中间人,在View和Model之间传递点什么,打打酱油。有时候,Model和View甚至直接联系,绕开了controller。

而在ASP.NET MVC中,虽然有一个Model,但此Model并非彼巨无霸Model。ASP.NET MVC中的Model,是一个跟视图有关的Model,也就是传说中的那个VM,ViewModel,它只是经典巨无霸Model的一部分。ViewModel,顾名思义,主要用于View。经典巨无霸Model,被拆分成了数据(ViewModel、领域对象、数据库实体类 )+ 业务逻辑(BLL ,各种Service)。因此,Model只不过是一群概念的集合,并不是一个实实在在的对象。

值得一提的是,ViewModel、领域对象、数据库实体类很有可能是同一个对象。比如说,我们在View里直接操作的VM,其实常常就是将数据持久层的实体类直接拿过来用的。即便如此,但在软件设计阶段,还是要将它们的概念区分开。

ASP.NET MVC的原理,其实就是使用HttpModule和HttpHandler将用户的请求拦截,按照设定的路由规则解释到相应的控制器和Action,加以执行。Module是一个比较宏观一点的概念,像Session、Cache都由相应的Module负责;而Handler就是负责处理具体请求的。先有Module,再有Handler。它们的关系,有点像进程和线程。

最新文章

  1. 未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序。解决办法
  2. 《精通C#》第十六章-动态类型和动态语言运行时-第一节至第四节
  3. “耐撕”团队2016.03.28 站立会议
  4. Syntax error, annotations are only available if source level is 1.5
  5. Metasploit是一款开源的安全漏洞检测工具,
  6. 【SPOJ】1812. Longest Common Substring II(后缀自动机)
  7. java clone简单学习
  8. chrome 31删除输入框的历史记录
  9. dedecms网站如何做在线订单功能
  10. Python的包管理
  11. 王立平--Button底,点击效果设置
  12. css3布局相关(持续更新)
  13. .13-Vue源码之patch(3)(终于完事)
  14. 携程Java后台开发三面面经
  15. Vim配置(python版)
  16. 基于fastadmin快速搭建后台管理
  17. IDEA 不识别的MAVEN 项目应如何处理
  18. HDU 1046(最短路径 **)
  19. mysql8.0.11绿色版安装教程
  20. python中的张量运算(tensor)

热门文章

  1. 制作iso镜像U盘自动化安装linux系统
  2. HTML5表单新增元素与属性
  3. RabbitMQ 关键词解释
  4. luogu2633 Count on a tree
  5. exports和moudle. exports
  6. Python模块学习 - openpyxl读写excel
  7. 【HDOJ6324】Grab The Tree(博弈)
  8. 【frameset】frameset设置不能拖动
  9. 简单使用SOCKET,TCP,UDP模式之间的通信
  10. foobar2000 iOS使用,并连接PC的歌曲进行播放