对MVC框架的理解

    前几天和同窗聊天,忽然谈到他去阿里面试的时候,面试官叫他谈谈对MVC框架的理解,而后他没回答好,就被刷了。聊完后想了想要是这个问题换成个人话,我该怎么回答。想了想后,总结了一下。大体回答以下。 面试

1,简单介绍数据库

    首先,MVC框架并非一个复杂的东西,它本质上仍是一种GoF,MVC分别指model,view,controler。编程

    即模型,视图,控制器。设计模式

    模型表示应用程序中处理业务数据和业务逻辑的部分,模型能够是一个单个对象,或是它也能够是由多个对象组成的某些结构。服务器

    视图是用于将信息展示给用户的一个模型的表示。它一般充当一个表现过滤器,只是将一个模型中包含的某些方面的数据展示出来,而隐藏另一些数据。视图向模型请求,以获取须要表现的数据。它也能够经过发送相应的命令,来修改模型中的数据。这样的查询和命令,都必须在模型中由语义定义。架构

    控制器充当用户和应用程序之间的链接,它安排视图在屏幕上显示,或者经过显示菜单,输入字段,按钮或其余的页面元素来读取用户输入。控制器先解释用户输入,而后将其传递给一个或多个视图。mvc

2,应用延伸app

    在具体实现中,页面内容存储在支撑应用程序的模型中。技术性的细节可能有所不一样,文本和图像可能存储在数据库中,而服务器文件则以其余的方式存储,可是,数据融合在一块儿的规则是相同的,都是做为框架的模型部分进行编码。视图则经过HTML和CSS给内容添加了一个或多个可视化的显示层,应用这些层面能够给Web应用程序一种特定的外观和样式。咱们能够修改内容显示的方式,而根本不须要修改模型中存储的初始的内容。控制器则负责与控制相关的,好比包含了链接到页面上的交互元素的程序代码,例如,表单字段,按钮和连接等。这些代码解释用户输入并与模型和视图通讯。框架

3,小总结模块化

     总的来讲,MVC架构中,数据存储在model中,数据的显示依靠View控制,数据的变化使用Controller控制。三者各思其职。使用MVC模式的程序的结构相比未使用MVC框架的程序,结构更清晰,代码易读。

4,实际编码

     回答到了上面这一步,面试官已经知道你对MVC是确实有还不错的理解了,至少不会由于这个问题而刷了你,可是这样够吗?这样是不够的,面试,固然要让面试官从心底里认为你比他还牛。因此... 下面对MVC框架进行更深层次的回答...,下面的回答围绕MVC在实际框架中的编码进行。回答的目的在于让面试官知道你不仅仅是知道MVC的概念,并且知道MVC在实际框架如VUE中的具体实现。

      ......  分割线 .....  接上面的回答继续... 

     可是事实上,就目前常见的MVC框架而言,如AngularJS,VUE.js, SpringMVC... 等等而言,MVC只是它们基础架构中的一个用法。单纯的实现一个MVC是很简单的,以下面的代码所示。

const app = {
	M:{
		//Model代码
	},
	V:{
		//View代码
	},
	C:{
		//Controller代码
	}
}

     如上的代码中,咱们就实现了一个简单的MVC框架,能够经过向app.M app.V app.C 中添加相应的代码实现一个MVC框架。好比在app.M中添加model相关的代码,如本地存储控制(dao层)。

     并且,咱们能够经过上述代码看到,当model,view,controller三者各思其职时,添加更多的功能(亦或使用更多的设计模式)时是能够比未使用MVC架构时更易写的,好比,当咱们为视图层添加模板时,能够在view层和model层的接口处添加,这样结构就会很清晰。事实上也正是如此,常见的MVC框架中,MVC只是基础,是为了使代码结构更清晰,换句话说是为了使其余的GoF实现起来更方便,如AngularJS,VUE等MVC框架,mvc是框架最大的逻辑,在MVC的基础上,使得其余的GoF,如模块化,依赖注入(或称控制反转),数据绑定,链式调用,模板,职责分离等都在这个基础上实现,依靠MVC可使整个整个框架逻辑整清晰。

5,扩展

     .... 上面的实际编码讲得有点乱,由于真正要扯MVC源码层次上的实现的话,能够扯不少,就简单概况一下了.. 2333,下面将扩展..  就是让面试官以为.  哇 你怎么能想到这么多...  接上面

     就MVC而言,其实它不仅仅是一种GoF,model,view,control的概念在面向对象中运用也是很普遍的。好比,咱们知道面向对象的基础是多态,继承,封装。封装.就是一种MVC的实现。如一个对象有Private attr,public attr,Private function,public function,内部的均可以整合到模型层,外部的都是视图层,外部和内部交换数据,实现控制的,都是控制层。对MVC而言,当咱们谈MVC时,咱们看到的是. 模型,视图,控制器。同样的,对象亦是如此,对象做用域,对象行为方法,对象控制方法。这不正也是一种能够称为相似MVC模式么... 并且.对象的数据,行为,和一个MVC的行为能够称为是如出一辙的。MVC实现了对数据的封装,将表示层和控制层与数据层分离。

   ... 说了这么多..  看面试官反应吧.. 通常能和我扯编程思想的 还没遇到过几个比我强的  233 自诩 自诩. ..  并且. 说到这里, 面试官应该快要甘拜下风了.  2333.    面试官还想继续谈的话.  就. 继续扯... 

  ... 扯理解相关的 扯到最后无非是几点。 软件工程上的, 可维护性,可移植性...。  面向对象上的  数据隐藏,封装...。设计模式上的 各类GoF,最小暴露原则,小核心,小模块,小接触面...   从现实中提取出来的各类概念. 具体编程中怎样实现的 等等。... ...

     要真正理解MVC的话,看源代码是一种选择,可是看源代码对于大部分人来讲太难了,由于像前面所说的,一个MVC框架并不仅仅的只有一个MVC GoF,还有各类各样的GoF。通常来讲是很难啃的。 因此理解MVC仍是得从现实中出发,MVC和面向对象是很像的,如看一我的,有视图层(人的行为,外部可访问属性等等),控制层(如肌肉运动),模型层(人的全部内部数据均可以看做模型层)。

     看了看.  写的有点乱.  2333.  由于这个东西要扯不少的话. 只能把MVC框架源码(各类技术实现细节)拿出来扯了.  差很少就这样了。