前端设计模式-MVVM,MVC

1,656 阅读3分钟

MVVM,MVC都是软件架构设计模式,它们的主要作用都是分离视图和业务逻辑。

MVC

首先说一下MVC模式,它是一种传统的软件架构模式,它有三个基本的部分,模型,视图,和控制器。

  • 模型:主要是用来封装程序的业务逻辑和相关的数据,一旦有数据变动,就会通知有关的视图
  • 视图:主要负责数据的展示,并且响应用户的操作
  • 控制器:控制器是模型和视图之间的纽带,接收视图传过来的用户事件并且传递给模型,同时,接收从模型传来的最新数据,用来更新更新视图

基本是这样一个流程:

  • view接受用户交互请求
  • view将请求交给controller
  • controller操作model更新数据
  • 数据更新后,model通知view更新视图
  • view更新变化数据

缺点:

  • 视图中也会包含一些业务逻辑,导致后期修改比较复杂困难,可复用程度低
  • 视图和控制层并没有完全分离,解耦程度不够
  • 单向通信(既model绑定到view,当我们用js更新model时,view会自动更新,但是当view变动时,model不会自动更新)

MVVM

MVVM是当下比较流行的一种架构设计模式,它也有三个基本的部分,视图,模型,模型视图

  • 模型:仅仅只关注数据本身,不关心任何行为
  • 视图:MVVM模式中的视图通过使用模板语法来渲染数据,当viewmodel对model进行更新的时候,会通过数据绑定更新到view
  • viewmodel:ViewModel 是一个同步View 和 Model的对象,通过数据绑定将view和model链接起来,

基本是这样一个流程:

  • View 接收用户交互请求
  • View 将请求转交给ViewModel
  • ViewModel 操作Model数据更新
  • Model 更新完数据,通知ViewModel数据发生变化
  • ViewModel 更新View数据

实现数据绑定的方式:

  • 数据劫持vue
  • 发布订阅者模式
  • 脏值检查angualr

优点:

  • 双向通信(viewModel和view绑定)
  • 低耦合,view可以独立于model的变化和修改,一个ViewModel可以绑定到不同的”View”上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
  • 可复用性,可以将一些可复用的逻辑放在一个 ViewModel 中,让多个 View 复用这个 ViewModel。
  • 独立开发,开发人员可以专注于业务逻辑和数据的开发,而不用去管数据的流向

缺点: viewmodel会越加庞大,调用的复杂度增加。

但是MVVM不是万能的,它的目的是为了解决复杂的前端逻辑。对于以展示逻辑为主的页面,例如,新闻,博客、文档等,不能使用MVVM展示数据,因为这些页面需要被搜索引擎索引,而搜索引擎无法获取使用MVVM并通过API加载的数据。

引申问题:

  • 前端基于MVC/MVVM架构,如何做SEO优化?

搜索引擎的基础爬虫的原理就是抓取网页的html源代码并解析。但一般来说搜索引擎是不回去执行请求到的js的。ps:谷歌搜索引擎已经具备识别JavaScript的能力了

1.简单一点的可以用Prerender预渲染,它可以帮忙把页面渲染完成之后再返回给爬虫工具,我们的页面也就能被解析到了。

2.复杂一点的话,可以用服务端渲染SSR

  • 什么是服务端渲染?

简单的理解就是通过服务器生成html字符串,再发送到浏览器。

  • 服务端渲染利弊?

1.有利于seo,有利于首屏渲染,

2.服务端压力大,尤其是高并发的情况下,会打量占用资源

3.学习成本比较高,除了要知道前端技术,还要学习一些后端的技术,而且项目的构建和部署会变得复杂。