前后端分层模式MVC&MVVM

早期



特点

  页面由 JSP、PHP 等工程师在服务端生成

  JSP 里揉杂大量业务代码

  浏览器负责展现,服务端给什么就展现什么,展现的控制在 Web Server 层

优点

  简单明快,本地起一个 Tomcat 或 Apache 就能开发,调试什么的都还好,只要业务不太复杂。

缺点

   前端难以搭建本地环境

  代码重用性,扩展性,维护性很低

后端 MVC 开发



特点

  • View:进行数据显示。
  • Model:用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。
  • Controller:处理用户交互,负责转发请求,并对请求进行处理(向模型请求数据或发送数据)

    服务器端的MVC流程:

    客户端发送请求 -> 服务器触发Controller -> 服务器进行Model各种操作 -> 服务器根据Model数据渲染View -> 服务器回复请求,包含了整个View的html -> 客户端重新渲染整个页面,所有的css都又计算了一遍,所有的js都重新执行了一遍,所有的资源都重新请求了一遍(虽然可能已经cache了)

优点

  代码可维护性得到明显好转

  线上模板的渲染还是由java来做的,形成的是带有动态数据的html,比较有利于SEO

缺点

    随着不同终端的出现,前端的工作量变大。但是前端依然依赖着后端(都在一个项目中进行开发)

  前后端职责依旧纠缠不清

前后端分离



特点

  ajax带来了Web开发革命性的变化。前端和应用服务器分离,前端和后端通过Ajax来通信。

  前后端分工,前端使用ajax与后端数据交互,操作视图,甚至控制部分路由,后端提供服务与数据。

优点

  前后端的分工非常清晰

缺点

   前端逻辑越来越重,越来越复杂,路由不好掌控。过分使用ajax不利于SEO。前端不坑重负

   这与 JSP 时代区别不大。复杂度从服务端的 JSP 里移到了浏览器的 JavaScript,浏览器端变得很复杂

前端分层



特点

  后端思想在前端进行应用

  前端代码变得也需要保存数据、处理数据、生成视图(SPA),这导致了前端 MVC 框架的诞生

  前端的MVC只是后端MVC中的View里面再去分出来的MVC。前端的MVC是为了解决复杂前端情况下模块化 JS的问题。

  一个事件的发生是这样的过程:
  1. 用户和应用产生交互。
  2. 控制器的事件处理器被触发。
  3. 控制器从模型中请求数据,并将其交给视图。
  4. 视图将数据呈现给用户。

  模型

  用来存放应用的所有数据对象。比如,可能有一个User模型,用以存放用户列表、他们的属性及所有与模型有关的逻辑;当控制器从服务器抓取数据或创建新的记录时,它就将数据包装成模型实例。也就是说,我们的数据是面向对象的,任何定义在这个数据模型上的函数或逻辑都可以直接被调用。

  视图

  呈现给用户的,用户与之产生交互。在JavaScript应用中,视图大都是由HTML、CSS、JavaScript模板组成的。除了模板中简单的条件语句之外,视图不应当包含任何其他逻辑。
  将逻辑混入视图之中是编程的大忌,这并不是说MVC不允许包含视觉呈现相关的逻辑,只要这部分逻辑没有定义在视图之内即可。我们将视觉呈现逻辑归类为“视图助手”(helper):和视图相关的独立的小工具函数。

  控制器

  模型和视图之间的纽带。控制器从视图获取事件和输入,对它们(很可能包含模型)进行处理,并相应地更新视图。当页面加载时,控制器会给视图添加事件监听,比如监听表单提交或按钮点击。然后,当用户和你的应用产生交互时,控制器中的事件触发器就开始工作了。

后端MVC中的view是前端MCV的全部

  前端MVC流程(前端其实大部分是MV+X,不一定有Controller):

  客户端根据用户的行为修改客户端Model -> 客户端更新和该Model相关的View -> 客户端Model发送sync请求到服务器,只包含改变了哪些数据 -> 服务器审核数据改动是否合法,只需回复是否修改成功 -> 客户端收到成功,什么都不用做;不成功,则把刚才改的View改回来,然后通知用户。(当然,也可以在客户端的Model里面也加入审核机制,这样对不合法数据的反应更快,但还是得保留服务器端的审核)

  比较一下可以看到,前端MVC需要向服务器端传递和接收的数据量都少很多,而前端要做的等待和渲染工作也少了很多。换言之,会提供更快的交互反馈,也意味着更好的用户体验。同时,服务器端的负载也略有降低,因为基本上只需要在数据库上提供一个RESTful API即可。

优点

  清晰的分工,可以让开发并行

  部署相对独立,产品体验可以快速改进。

缺点

  开发者在代码中大量调用相同的DOM API, 处理繁琐,操作冗余,使得代码难以维护

  大量的DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。

  当 Model 频繁发生变化,开发者需要主动更新到View ;当用户的操作导致Model发生变化,开发者同样需要将变化的数据同步到Model中, 这样的工作不仅繁琐,而且很难维护复杂多变的数据状态。

MVVM 模式



特点

另一些框架提出 MVVM 模式,用 View Model 代替 Controller。

  • Model
  • View
  • View-Model:简化的 Controller,为 View 提供处理好的数据,不含其他逻辑。

本质:view 绑定 view-model,视图与数据模型强耦合。数据的变化实时反映在 view 上,不需要手动处理。

优点 

  前端应用的复杂程度已不同往日,暴露出了三个痛点问题:

  开发者在代码中大量调用相同的DOM API, 处理繁琐,操作冗余,使得代码难以维护。

  大量的DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。

  当 Model 频繁发生变化,开发者需要主动更新到View ;当用户的操作导致Model发生变化,开发者同样需要将变化的数据同步到Model中, 这样的工作不仅繁琐,而且很难维护复杂多变的数据状态。

  早期 jQuery 的出现就是为了前端能更简洁的操作DOM 而设计的,但它只解决了第一个问题,另外两个问题始终伴随着前端一直存在。

  MVVM 的出现,完美解决了以上三个问题。

  MVVM 的三部分:

  Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;

  View 代表UI 组件,它负责将数据模型转化成UI 展现出来,

  ViewModel 是一个同步View 和 Model的对象。

  View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互。

  ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。

缺点

    代码不能复用。比如后端依旧需要对数据做各种校验,校验逻辑无法复用浏览器端的代码。如果可以复用,那么后端的数据校验可以相对简单化。
   全异步,对 SEO 不利。往往还需要服务端做同步渲染的降级方案。
   性能并非最佳,特别是移动互联网环境下。

参考:https://blog.csdn.net/u010924834/article/details/51025127 

     https://github.com/lifesinger/blog/issues/184

原文地址:https://www.cnblogs.com/lizhhmac/p/9226275.html

时间: 2024-10-11 19:29:50

前后端分层模式MVC&MVVM的相关文章

AngularJS中在前后端分离模式下实现权限控制 - 基于RBAC

权限的设计中比较常见的就是RBAC基于角色的访问控制,基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合.每一种角色对应一组相应的权限. 一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限.这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销. 在Angular构建的单页面应用中,要实现这样的架构我们需要额外多做一些事

关于前后端分层测试的思考

关于前后端分层测试,也就是常说的是否需要对于前段和后端分开测试,专门的测试人员负责前段页面测试,专门的测试人员负责后端接口和工具测试 谈到这个问题,首先要说目前的web(app)端展现形式基本都是前段负责展现数据和少量的逻辑,数据来源是接口和工具,但是该种方式并不是说前后端分开比不分开要好 个人认为,前后端集成测试与分开测试占比应该7:3的关系,即我们在测试过程中,可以按照以下方式: 1.正向(反向)和可以从前端发起的逻辑(与后端接口有关系)可直接从页面集成测试,检查点是页面展现,数据逻辑,数据

前后端分离模式

我是做java出身的前端开发工程师经历过由前端视图逻辑和后端的业务逻辑混合的开发模式, 在到由ajax跨域请求来进行前后端的分离的模式,最后到由nodejs来进行前后端的分离, 今天就分别站在不同的视角上尽可能的为大家剖析下这几种模式的优缺点. 前后端逻辑混合开发模式: 这种开发模式在现在来看几乎没有什么优点,但是在很多互联网公司依然在用,我想这大概是历史原因造成的吧, 也有可能缺乏技术体系的整体思想,但是也不能完全否定其优点,与第二种开发模式相比较. 优点: 1. 用户体验好,在相同的网络条件

前后端分离模式下的权限控制方案

在前后端分离的模式下,所有的交互场景都变成了数据交互,因此传统业务系统中的权限控制方案在前端已经不再适用(比如使用后台模板标签进行权限控制),需要另外设计权限控制方案. 权限控制的概念 要理解权限控制,需要明白两个概念:资源和权限. 资源:对于一个系统来说,系统内部的所有信息都可以理解为是这个系统的资源.页面是资源.数据是资源.按钮是资源.图片也是资源. 权限:权限就是访问某个资源所需要的标识.无论系统的权限如何设计,在用户登陆的时候都需要计算当前登陆用户所拥有的权限标识集合,这样才能确定这个用

REST风格框架实战:从MVC到前后端分离(附完整Demo)

既然MVC模式这么好,难道它就没有不足的地方吗?我认为MVC至少有以下三点不足:每次请求必须经过“控制器->模型->视图”这个流程,用户才能看到最终的展现的界面,这个过程似乎有些复杂:实际上视图是依赖于模型的,换句话说,如果没有模型,视图也无法呈现出最终的效果:渲染视图的过程是在服务端来完成的,最终呈现给浏览器的是带有模型的视图页面,性能无法得到很好的优化. 为了使数据展现过程更加直接,并且提供更好的用户体验,我们有必要对MVC模式进行改进.不妨这样来尝试:首先从浏览器发送AJAX请求,然后服

[转]从MVC到前后端分离

从MVC到前后端分离 来源:csdn 发布时间:2015-10-26 阅读次数:1680 1. 理解MVC MVC是一种经典的设计模式,全名为Model-View-Controller,即模型-视图-控制器. 其中,模型是用于封装数据的载体,例如,在Java中一般通过一个简单的POJO(Plain Ordinary Java Object)来表示,其本质是一个普通的Java Bean,包含一系列的成员变量及其getter/setter方法.对于视图而言,它更加偏重于展现,也就是说,视图决定了界面

从 MVC 到前后端分离——转自:OSChina 黄勇

转自:OSChina 黄勇 从 MVC 到前后端分离 1 理解 MVC MVC 是一种经典的设计模式,全名为 Model-View-Controller,即 模型-视图-控制器. 其中,模型 是用于封装数据的载体,例如,在 Java 中一般通过一个简单的 POJO(Plain Ordinary Java Object)来表示,其本质是一个普通的 Java Bean,包含一系列的成员变量及其 getter/setter 方法.对于 视图 而言,它更加偏重于展现,也就是说,视图决定了界面到底长什么样

从MVC到前后端分离

摘要:MVC模式早在上个世纪70年代就诞生了,直到今天它依然存在,可见生命力相当之强.MVC模式最早用于Smalltalk语言中,最后在其它许多开发语言中都得到了很好的应用,例如,Java中的Struts.Spring MVC等框架. 1. 理解MVC MVC是一种经典的设计模式,全名为Model-View-Controller,即模型-视图-控制器. 其中,模型是用于封装数据的载体,例如,在Java中一般通过一个简单的POJO(Plain Ordinary Java Object)来表示,其本

从 MVC 到前后端分离

从 MVC 到前后端分离 1 理解 MVC MVC 是一种经典的设计模式,全名为 Model-View-Controller,即 模型-视图-控制器. 其中,模型 是用于封装数据的载体,例如,在 Java 中一般通过一个简单的 POJO(Plain Ordinary Java Object)来表示,其本质是一个普通的 Java Bean,包含一系列的成员变量及其 getter/setter 方法.对于 视图 而言,它更加偏重于展现,也就是说,视图决定了界面到底长什么样子,在 Java 中可通过