前端技术

MVVM

2018-09-16  本文已影响0人  JunChow520

领域驱动设计

ViewModel和View一起组成领域驱动架构体系中的展示层Presention,在MVVM架构中,ViewModel连接视图View和数据业务的Model层,而Domain和Data数据持久化层共同组成整个Model。

image.png

常见的客户端结构设计有三种方式

MVVM(Model-View-ViewModel)是一种软件架构设计模式,由微软WPF和Silverlight的架构师Ken Cooper和Ted Peters开发,是一种简化用户界面的事件驱动编程方式,由John Gossman于2005年博客发表。

MVVM是一种架构模式,并非一种框架,是一种思想,一种组织和管理代码的艺术。它利用数据绑定、属性依赖、路由事件、命令等特性实现高效灵活的架构。

WPF(Windows Presentation Foundation)是微软推出基于Windows的用户界面框架。

MVVM源于MVC(Model-View-Controller)模式,期间还演化出MVP(Model-View-Presenter)模式。MVVM的出现促进了GUI前端开发和后端开发逻辑的分离,提高了前端开发效率。

MVVM的核心是数据驱动即ViewModel,ViewModel是View和Model的关系映射。ViewModel类似中转站(Value Converter),负责转换Model中的数据对象,使得数据变得更加易于管理和使用。MVVM本质就是基于操作数据来操作视图进而操作DOM,借助于MVVM无需直接操作DOM,开发者只需完成包含声明绑定的视图模板,编写ViewModel中有业务,使得View完全实现自动化。

The term means "Model of a View", and can be thought of as abstraction of the view.
视图的模型,可将其想象成一个抽象化的视图。

在MVVM中View和Model是不可以直接进行通信的,它们之间存在这ViewModel这个中介充当着观察者的角色。当用户操作View,ViewModel感知到变化,然后通知Model发生相应改变,反之亦然。ViewModel向上与视图层View进行双向数据绑定,向下与Model通过接口请求进行数据交互,起到承上启下的作用。

MVVM

KnockoutJS是最早实现MVVM模式的前端框架之一

MVVM

ViewModel所封装出来的数据模型包含视图的状态和行为两部分,Model的数据模型只包含状态,这样的封装使得ViewModel可以完整地去描述View层。MVVM最标志的特性是数据绑定,MVVM的核心理念是通过声明式的数据绑定来实现View的分离,完全解耦View。

image.png

响应式双向数据绑定的实现原理

  1. 脏值检查

AngularJS实现方式

通过脏值检查的方式比对数据是否变更,来决定是否更新视图。最简单的方式是通过setInterval()定时轮询检测数据变动。AngularJS只有在指定事件触发时进入脏值检测。

检查器是一颗树状的结构,当异步事件发生时,脏检查会从根组件开始,自上而下的对子组件进行检查,这种检查的性能存在很大问题。

  1. 观察者-订阅者(数据劫持)

VUE的实现方式

Dep内部维护了一个数组,用来执行收集订阅者Watcher,数据变动触发notify()函数,在调用订阅者的update()方法。

VUE image.png
上一篇 下一篇

猜你喜欢

热点阅读