十一周总结学习笔记

二、结构

  模型组件包含应用程序的功能内核,他封装了相应的数据并输出执行特定应用程序处理的过程;模型也提供访问数据的函数,这些数据有获得待显示的数据的视图组件使用。

  控制器代表用户调用所有这些过程。

三、目的

  实现一种动态的程序设计,是后序对程序的修改和扩展简化,并且使程序某一部分的重复利用称为可能。

  通过对复杂度的简化,使程序结构更加直观。

  将信息的内部表示与信息的呈现方式分离开来,并接受用户的请求。它分离了组件,并允许有效的代码重用。即,将模型和视图的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保模型和视图的同步,一旦模型改变,视图应该同步更新。

四、特点

  MVC重要特点就是两种分离:

  视图和数据模型的分离:使用不同的视图对相同的数据进行展示;分离可视和不可视的组件,能够对模型进行独立测试。因为分离了可视组件减少了外部依赖利于测试。(数据库也是一种外部组件)

  视图和表现逻辑(Controller)的分离:Controller是一个表现逻辑的组件,并非一个业务逻辑组件。MVC可以作为表现模式也可以作为建构模式,意味这Controller也可以是业务逻辑。分离逻辑和具体展示,能够对逻辑进行独立测试。

  优点:耦合性低;重用性高;生命周期成本低;部署块;可维护性高;有利软件工程化管理。

  缺点:没有明确的定义;不适合小型,中等规模的应用程序;增加系统结构和实现的复用性;视图与控制器间的过于紧密的连接;视图对模型数据的低效率访问;一般高级的界面工具或构造器不支持模式。

五、特定环境

  大的项目;需要划分模块的项目。

六、解决的问题

  因为在PHP还不支持面向对象之前,是过程化的方式来创建的,它们将 Model View Controller 三层的代码混在一起,十分混乱。所以它解决的问题有:维护难,开发速度慢,二次开发难度高,工作量大,代码复用,耦合度高,系统不灵活。

七、解决方案

  以我的理解,将项目模块化,分为三个部分:模型,视图和控制器三个部分。模型是应用对象,没有用户界面。视图表示它在屏幕上的显示,代表流向用户的数据。控制器定义用户界面对用户输入的响应方式,负责把用户的动作转成针对Model的操作。Model 通过更新View的数据来反映数据的变化。

八、实例

  应用于基于MVC架构模式的框架,常见的服务器端MVC框架有:Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF;常见前端MVC框架:angularjs、reactjs、backbone;由MVC演化出了另外一些模式如:MVP、MVVM。

  这里我们举例Spring MVC:

  Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。他的两个核心是两个核心:

  处理器映射:选择使用哪个控制器来处理请求
  视图解析器:选择结果应该如何渲染

  通过以上两点,Spring MVC保证了如何选择控制处理请求和如何选择视图展现输出之间的松耦合。

  运行原理如图所示:

原文地址:https://www.cnblogs.com/yang-qiu/p/10951081.html