zoukankan      html  css  js  c++  java
  • mvvm

      在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。 MVC模型关注的是Model的不变,所以,在MVC模型里,Model不依赖于View,但是 View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。

     MVVM在概念上是真正将页面与数据逻辑分离的模式,它把数据绑定工作放到一个JS里去实现,而这个JS文件的主要功能是完成数据的绑定,即把model绑定到UI的元素上。

     有人做过测试:使用Angular(MVVM)代替Backbone(MVC)来开发,代码可以减少一半。

    此外,MVVM另一个重要特性,双向绑定。它更方便你同时维护页面上都依赖于某个字段的N个区域,而不用手动更新它们。
      1.旧浏览器逐渐淘汰,移动端需求增加
    
      2.前端交互越来越多,功能越来越复杂
    
      现如今,前端可谓是包罗万象,产品形态五花八门,涉猎极广。高大上的技术库和框架,酷炫的运营活动页面和好玩的H5小游戏,不过这些一两个文件的小项目并非是前端技术的主要应用场景,更具商业价值的是复杂的web应用,它们功能完善,页面繁多,为用户提供了完整的产品体验,例如新闻趣味站,在线购物平台, 社交网络,金融信贷应用,音乐互动社区,视频分享平台,打车出行平台等等,这些网站和平台的共同特点就是交互多,功能复杂。
    
     3.架构从传统的后台MVC向REST API+前端MV*迁移
    
     传统的后台MVC方式,是当前端与后端发生一些数据交互的时候,会刷新整个页面,这样的用户体验是非常差的,因此,我们通过ajax的方式,和后端REST API做通信,异步刷新页面的某个区块,来优化和提升体验,同时把MV*拿到前端来做。

    MVVM框架

      MVVM框架主要包括三个部分Model、View和ViewModel,Model指的是数据部分,对应到前端就是一些Javascript对象,View指的视图部分,对应到前端就是DOM,ViewModel就是连接数据和视图的中间件,在MVVM的框架下视图和数据是不能直接通信的,它们通过ViewModel来通信,ViewModel通常要实现一个observer观察者,当数据发生变化,ViewModel能够监听到数据的这种变化,然后通知到对应的视图做自动更新,而当用户操作视图,ViewModel也能监听到视图的变化,然后通知数据做改动,这实际上就实现了数据的双向绑定。以上便是MVVM的一些基本概念。

    MVVM框架的主要应用场景

      1)针对具有复杂交互逻辑的前端应用
    
      2)提供基础的架构抽象
    
      3)通过Ajax数据持久化,保证前端用户体验
    
      好处就是当前后端进行一些数据交互的时候,前端可以通过Ajax请求对后端做数据持久化,不需要刷新整个页面,只需要改动DOM里需要改动的那部分数据和内容,特别是对于移动端应用场景,刷新页面的代价太昂贵,会重新加载很多资源,虽然有些资源会被缓存,但是页面的DOM、JS、CSS都会被浏览器重新解析一遍,因此,移动端页面经常会做成SPA单页应用,在这个基础上就诞生了很多MVVM框架,如Angular、React、Vue

    Vue.js的核心思想

      Vue.js的核心思想包括两个方面:数据驱动和组件化
    
      数据驱动:DOM是数据的一种自然映射,在vue.js中只需要操作数据,vue.js通过directives指令去对DOM做一层封装,当数据发生变化,会通知指令去修改对应的DOM,数据驱动DOM变化,DOM是数据的一种自然映射,vue.js还会对操作做一些监听,当我们修改视图的时候,vue.js监听到这些变化,从而去改变数据,这样就实现了数据的双向绑定。
    
      组件化的目的是扩展HTML元素,封装可重用的代码
    
      组件设计原则:
    
      1)页面上每个独立的可视/可交互区域视为一个组件,
    
      2)每个组件对应一个工程目录,组件所需要的各种资源在这个目录下就近维护,
    
      3)页面不过是组件的容器,组件可以嵌套自由组合形成完整的页面。
  • 相关阅读:
    百度之星资格赛1001——找规律——大搬家
    HDU1025——LIS——Constructing Roads In JGShining's Kingdom
    DP(递归打印路径) UVA 662 Fast Food
    递推DP UVA 607 Scheduling Lectures
    递推DP UVA 590 Always on the run
    递推DP UVA 473 Raucous Rockers
    博弈 HDOJ 4371 Alice and Bob
    DFS(深度) hihoCoder挑战赛14 B 赛车
    Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
    DP(DAG) UVA 437 The Tower of Babylon
  • 原文地址:https://www.cnblogs.com/weihengblogs/p/8663746.html
Copyright © 2011-2022 走看看