谈谈MVC——MVC初印象

  M、V、C之间有很强的关联性与独立性,看似矛盾的解释,却有十分奥妙的分工与合作关系。

彼此的关联性

  以”常规的“MVC解释法,彼此的关系如图所示:

  

Controller与View的关联性

  在Controller与View的关联性上,彼此都是双向关系,但Controller的主动性较高。

  当Controller为”主动“角色时:

    Controller可决定要显示哪一个View

  当View为"主动”角色时:

    View可决定数据要送回到哪一个Controller的Action。

    当View需要数据时,可决定数据应该从哪一个Controller的Action取得。

View与Model的关联性

  在View与Model的关联性上,View是站在“比较主动”的一方,而Model则是一个“数据服务提供商”的角度出发。

  View的数据基本上是从Controller传过来的,而传过来的数据型别却是Model所定义的。因此,View与Model之间大多是“彼此参考”的关系,也就是View会参考Model中的型别定义。如图所示

        

  若是发现从Controller传到View的数据不足以完整显示,此时,View的角色就会立即转变为“主动”,直接对Model进行数据查询,并获得数据。例如,欧诺个过ORM技术,可能会有延迟装入的机制,实际取得数据的时机,将是在View显示数据的时候。除此之外,一般在规划网站时,通常会先规划界面的外观,借此定义该界面应该会出现什么数据或字段。

Model与Controller的关联性

  在Controller与Model的关联性中,Controller永远居于“主动”的角色。Controller负责调用或使用Model所定义的各种类别,而Model很单纯的仅仅提供“数据服务”或“验证服务”给Controller使用。

彼此的独立性

  虽然M、V、C之前看似关联十分紧密,但是彼此间又不能拥有太强的相依性,否则就会失去我们采用MVC的初衷,因此M、V、C彼此之间的关系必须恰到好处。

Controller与View之间的独立性

  从前面的内容可以发现,Controller跟View与Model都有关联性,彼此之间维持着一种信任关系,称之为“Convention(常规)”。

  在大部分的Controller定义中,通常不会明确指定要显示哪张View,而是由MVC Framework依据常规帮你选出相关的View来显示,这就是Controller与View之间的独立性。

换句话说,当View尚未被建构时,Controller其实可以先撰写程序。相对来说,View与Controller的关系,大多是由Controller主动去挑选适合的View来显示,所以,View本身对于“输出”的任务来说,是处于一个非常独立的状态。因此,当Controller尚未被构建时,View也可以先撰写程序。

View与Model之间的独立性

  View大多参考自Model里所定义的型别,但这并非绝对必要的。View不需要Model也能够运行,只是这样View就会缺乏Model所能提供的数据型别定义。这会造成View在开发时没有那么方便。

Model与Controller之间的独立性

  Model是贯穿全局的重要角色。有趣的是,在没有Model的情况下,Controller与View一样可以运行得很好。例如,我们在显示“静态页面”时,没有任何动态数据的情况下,Controller不需要从Model取得数据,彼此之间当然就没什么关系了。

  

时间: 2024-11-02 20:11:46

谈谈MVC——MVC初印象的相关文章

谈谈.NET MVC QMVC高级开发

自从吾修主页上发布了QMVC1.0,非常感兴趣,用了半月的时间学习,真的感觉收益非浅,在此声明非常感谢吾修大哥的分享! 1.轻快简单,框架就几个类,简单,当然代码少也就运行快!单纯的MVC,使的如果你想扩展框架,可以轻易的在QMVC上增加和减少功能,也就是说更容易的去修改和读懂源码. 2.可以与webform框架融合,也就是说你用webform和mvc共同在同一个项目中运行. 3.QMVC APP开发,QMVC APP可以轻易实现多个QMVC项目合并到一个项目中运行,也可以轻易将其分离开独立运行

谈谈对mvc的认识

谈谈对mvc的认识 简单来说,MVC是一种流行的程序架构,获得C#.Java.PHP.Ruby等多种语言的支持.MVC是模型(Model) .视图(View).控制器(Control) 的英文首字母的缩写,核心思想是:视图和用户交互. 通过事件导致控制器改变,控制器改变导致模型改变或者控制器同时改变.两者模型改变导致视图改变或者视图改变潜在的从模型里面获得参数来改变自己.MVC(Model-View-Controller),即把一个应用的输入.处理.输出流程按照Model.View.Contro

谈谈对MVC、MVP和MVVM的理解

刚出来工作的时候维护过一个老系统,该系统是用微软的ASP(Active Server Pages 动态服务器页面)写的.每一个页面都是一个ASP文件,每一个一个ASP文件中又同时包含了HTML.CSS.Java Script.VB Script代码,把这么多代码糅合在一起,可以想象一下如果一个这样的页面包含复杂的业务逻辑,每当要对系统进行维护或增加新功能的时候那个酸爽- 像上面这种把界面.业务逻辑和数据模型都整合在一起的做法,从软件的设计和可维护性方面看都是极不可取的.为了解决上述问题就发展出了

Vue.js之初印象

一.背景 MVVM模式,很多人在说在用,好吧,我落后了,我目前的项目木有用到MVVM模式的框架,vuejs,reactjs,angularjs,nonono,自己去捣鼓过ng,项目木有用到.实在不敢称自己是front-end developer.趁这个失业期,vuejs的学习起哟. 二.简介 1.vue.js是什么 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们

OpenCL学习笔记(一):摩尔定律、异构计算与OpenCL初印象

关于摩尔定律: 摩尔定律1965年提出,晶体管密度是按照每年翻倍发展的,之后的趋势也是这样--每一代芯片的的时钟频率提高50%,而同时工艺节点减小了0.3,功耗密度翻倍(保持功耗相同的情况下,面积0.7*0.7=0.49,因此提高频率使得性能提升了):而在2000年中期之后,出现了物理尺寸更小的器件,意味着,我们没有办法保持功耗密度不变,而同时提高频率,结果我们看到自此之后,时钟频率并没有显著提高,需要通过并行来提高性能,所以多核CPU流行起来.即使是最基本的处理器,超标量和无序指令执行等高级体

初印象至Vue路由

初印象系列为快速了解一门技术的内容,后续会推出本人应用这门技术时发现的一些认识. Vue路由和传统路由的区别: Vue路由主要是用来实现单页面应用内各个组件之间的切换,同样支持传递参数等功能.而传统路由使用超链接 以下内容来自官网,js使用ES6 如何在vue项目中使用vue-router HTML <script src="https://unpkg.com/vue/dist/vue.js"></script> <script src="htt

spring MVC &lt;mvc:annotation-driven&gt;

研究SpringMvc 3.2的<mvc:annotation-driven>默认干了什么 如果不配置其他参数,大致相当于以下的配置文件(参考自org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser) <!-- 配置路径扩展名映射的媒体类型 --> <bean name="pathExtensionContentNegotiationStrategy" clas

uml时序图的初印象-------Day64

最近有好多想法迫不及待的想去实现,可是事实上是在那些最开始想的非常明白,感觉会没问题的地方也总是会出现问题,导致略微有些急躁,还是要淡定啊,又到了周末,明后天要收拾东西搬家,不知道宽带能不能顺利的给挪过去,想提前来记录下这周的工作吧. 总的来说,这周完成了界面的初始设计,然后就是这概要设计了,结果整合下来,word文档都有近百页了,太多时序图了,画的我都有些头昏脑涨.其实,在很久之前的某公司,我面试的第一道问题就是时序图,结果当时的我是可怜的一片茫然,结果也就自然而然了.这次再看时序图,又理解了

gulp初印象

几个月前三木君向我推荐过gulp,到现在因为工作需要才接触到它,真的很惭愧,在此记录下对gulp的初印象. 全局安装: $ npm install –global gulp 一个gulpfile.js文件: 这个文件需要在项目的根目录下创建.默认任务(什么也不做): var gulp = require('gulp'); gulp.task('default', function() { // place code for your default task here }); 下面的命令将执行这

Django初印象之视图(view)

一.view的初印象 一个视图函数(类),简称视图.我们发起web请求时,返回的web响应.[大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中.] 二.普通view的样子 下面是一个以HTML文档的形式返回当前日期和时间的视图: from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.