javascript数据驱动页面

2005 Ajax 提出,web2.0的时代到来,web开发开始越来越注重与用户交互,于是乎,越来越多的后端逻辑迁移到前端实现,javascript代码量大大提升,但是,大量的业务逻辑也ui逻辑混在一起,导致程序臃肿,代码难以维护。于是开始有了,一些类似 spring 的分层的思想,将业务逻辑和ui逻辑分开。

MVC( backbone

MVC是一个架构设计模式,它通过分离关注点的方式来支持改进应用组织方式。它促成了业务数据(Model)从用户界面(View)中分离出来,还有第三个组成部分(Controller)负责管理传统意义上的业务逻辑和用户输入。

Model 数据模型一般以json对象的形式展现
View表示表现层,也就是用户界面,对于网页来说,就是用户看到的网页HTML代码。
Controller 表示控制层,用来对原始数据(Model)进行加工,传送到View。

mvc结构中 view是根据 模板 + 数据(Model) 生成的一段html代码,当我们的用户进行点击按钮或者输入等等操作的时候,就会产生一个动作( action )view会把 action 传递给controller,controller中进行逻辑处理对原始model进行修改,view监控到model的改变之后,通过模板和新的数据重新渲染页面。

在项目中往往采用更加灵活的方式,以 backbone 为例:

用户可以向 View 发送指令(DOM 事件),再由 View 直接要求 Model 改变状态

用户也可以直接向 Controller 发送指令(改变 URL 触发 hashChange 事件),再由 Controller 发送给 View

Controller 非常薄,只起到路由的作用,而 View 非常厚,业务逻辑都部署在 View。所以,Backbone 索性取消了 Controller,只保留一个 Router(路由器)

MVP(React

MVP 是基于 MVC 模式一种演变, P代表的是 Presenter(展示器),其模式如下图所示:

我们可以看到 view和model是通过展示器做联系,当view中发生了动作(Dom事件)会先传递给展示器,由展示进行逻辑处理,改变model,同时展示其还监控了model的变化,当model发生改变的时候展示其会做相应的逻辑处理并重新渲染页面。

这种做法 View 非常薄,不部署任何业务逻辑,称为”被动视图”( Passive View ),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

实际使用中以 react 为例:
在react中 以 virtual dom 就是展示器,而组件的状态 就是model, 当页面上产生事件的时候,会先传递到 virtual dom dom触发组件中的事件,组件中进行逻辑处理,改变调用 setState 方法改变状态, 组件会重新监控状态改变,调用 render 方法产生新的 virtual dom,再通过 virtual dom 的对比,得出哪些节点发生改变,然后更新改变的节点的真实dom;

MVVM( angular angular2 vue)

MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。

唯一的区别是,它采用双向绑定(data-binding); viewModel会观察 model的变化,当model发生改变的时候,viewModel会改变绑定了这个 model 的dom,同时 viewModel也会监控view的变化,当view发生改变的时候,其绑定的model也会发生改变

angular,vue等框架都是基于mvvm模式的一种实现

文章目录
  1. 1. MVC( backbone )
  2. 2. MVP(React)
  3. 3. MVVM( angular angular2 vue)
,