设计模式(MVC/MVP/MVVM)
MVC(Model View Controller):
- 数据模型(Model):数据保存,代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑
- 视图(View):代表UI 组件,它负责将数据模型转化成UI 展现出来。
- 控制器(Controller):业务逻辑
- MVC特点:
- 用户可以向 View 发送指令(DOM 事件),再由 View 直接要求 Model 改变状态。
- 用户也可以直接向 Controller 发送指令,再由 Controller 发送给 View。
- Controller 非常薄,只起到路由的作用,而 View 非常厚,业务逻辑都部署在 View。
MVVM(Model-View-ViewModel )
- Model 代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。
- View 代表UI 组件,它负责将数据模型转化成UI 展现出来。
- ViewModel 监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View 和 Model的对象,连接Model和View。
- MVVM特点
在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。
ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。
Vue核心原理:
- Vue由数据驱动,Vue是一个提供了MVVM风格的双向数据绑定的Javascript库,专注于View 层。它让开发者省去了操作DOM的过程,只需要改变数据即可。
- Vue实现数据双向绑定,采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调。
- 虚拟DOM,vue会建立虚拟dom树,当被监测的数据改变会通过Object.defineProperty定义的数据拦截,截取到数据的变化,从而通过发布订阅者模式,触发Watcher(观察者),从而改变虚拟dom的具体数据,从而改变最后渲染的dom树的值,完成双向数据绑定