对MVC框架的理解

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

1,简单介绍

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

    即模型,视图,控制器。

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

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

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

2,应用延伸

    在具体实现中,页面内容存储在支撑应用程序的模型中。技术性的细节可能有所不同,文本和图像可能存储在数据库中,而服务器文件则以其他的方式存储,但是,数据融合在一起的规则是相同的,都是作为框架的模型部分进行编码。视图则通过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框架源码(各种技术实现细节)拿出来扯了.  差不多就这样了。

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值