前言
对于Web前端架构模式的笔记 之前就有了解过MVC和MVVM,但是都没有深入了解过,只知道现在的Vue,React以及Angulat框架都属于MVVM框架,今天便在此深入了解一下 参考博文
架构模式简介
MVC
- 是Model View Controller 的缩写
- Model:模型层,是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
- View:视图层,用户界面渲染逻辑,通常视图是依据模型数据创建的。
- Controller:控制器,数据模型和视图之间通信的桥梁,通常控制器负责从事图读取数据,控制用户输入,并向模型发送数据。
- Controller-->Model 选择模型
- Model驱动View视图
- View-->Controller 动作指令
- Controller负责将Model的数据用View显示出来,换句话说就是在Controller里面把Model的数据赋值给View。
- 特点:实现关注点分离,即应用程序中的数据模型与业务和展示逻辑解耦。就是将模型和视图之间实现代码分离,松散耦合,使之成为一个更容易开发、维护和测试的客户端应用程序。
- 优点
- 耦合度低,视图层和业务层分离
- 重用度高
- 生命周期成本低
- 可维护性高
- 部署快
- 缺点
- 不适合小型项目的开发
- 视图与控制器间的过于紧密的连接,视图与控制器是相互分离,但却是联系紧密的部件,妨碍了他们的独立重用
- 降低了视图对模型数据的访问,依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
例子
View
<div>
<span id=\"container\">0</span>
<button id=\"btn\">+</button>
</div>
Controller
const button = document.getElementById('btn');
// 响应视图指令
button.addEventListener('click', () => {
const container = document.getElementById('container');
// 调用模型
add(container);
}, false);
Model
function add (node) {
// 业务逻辑处理
const currentValue = parseInt(node.innerText);
const newValue = currentValue + 1;
// 更新视图
node.innerText = current + 1;
}
MVVM
- 是Model-View-ViewModel的简写,即模型-视图-视图模型。
- Model:模型,指的是后端传递的数据。
- View:视图,指的是所看到的页面。
- ViewModal:视图模型,mvvm模式的核心,它是连接view和model的桥梁。主要用来处理业务逻辑
- 两种实现方向
- DOM 事件监听 :将视图转化成模型,即将所看到的页面转化成后端的数据。
- 数据绑定 :将模型转化成视图,即将后端传递的数据转化成所看到的页面。
- 两种方式结合起来就是:数据绑定
- 特点:在MVVM的框架下,视图和模型是不能直接通信的,它们通过ViewModal来通信,ViewModel通常要实现一个observer观察者,当数据发生变化,ViewModel能够监听到数据的这种变化,然后通知到对应的视图做自动更新,而当用户操作视图,ViewModel也能监听到视图的变化,然后通知数据做改动,这实际上就实现了数据的双向绑定。并且MVVM中的View 和 ViewModel可以互相通信。
- 优点:
- 低耦合:视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
- 可重用性:可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
- 独立开发:开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xml代码。
- 可测试:界面向来是比较难于测试的,而现在测试可以针对ViewModel来写
- 双向数据绑定:它实现了View和Model的自动同步,当Model的属性改变时,不需要手动操作Dom元素,来改变View的显示,而是改变属性后该属性对应View层显示会自动改变
- 适用场景: 适合数据驱动的场景,数据操作比较多的场景