4

软件架构设计:B/S层次架构之MVC/MVP/MVVM

 1 year ago
source link: https://www.51cto.com/article/751669.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

层次架构风格从之前的两层C/S到三层C/S,然后演化为三层B/S架构,三层B/S架构之后仍然在往后面演化,我们来看一下层次架构演化过程中都有了哪些演化的架构风格呢?

而我们先简单了解一下之前的层次架构风格中分层的各个层次的作用。

d77c26498522341d0ed4027b4888f5d6583ced.png
  • 表现层:由于用户进行交互,比如MVC,MVP,MVVM其实都是与用户页面打交道的一层
  • 中间层:比如我们的接口层或者业务逻辑层,一般主要用于处理业务逻辑,比如我们的service层
  • 数据访问层:ORM(对象关系映射),比如说平常的hibernate或mybatis.就是把一个个对象和关系表的数据通过映射关系绑定起来,让我们把数据库操作映射到这个对象的操作上来。。
  • 数据架构层(其实就是数据库)

1、MVC架构风格

MVC分别是什么?

  • Model(模型):是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
  • View(视图):是应用程序中 处理数据显示的部分,通常视图是依据模型数据创建的。
  • Controller(控制器):是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

在J2EE体系中对应关系为:

  • Model(模型):Entity Bean, Session Bean
  • View(视图):JSP
  • Controller(控制器):Servlet

在SpringBoot体系中

  • Model(模型):也就是我们的Entity
  • View(视图):模板页面,如果是JSON数据表示省去了View这个层次,返回JSON数据交给前端自己处理数据并渲染即可
  • Controller(控制器):Controller,其实本质上还是Servlet

主动MVC和被动MVC

66f531e349c5762e12c824e308f54b123575e3.jpg

细节其实不需要我们去了解,但是有主动型和被动型需要我们了解。

动作解读(了解MVC直接如何交互)

  • 1、客户做出某种动作,比如点击某个按钮,View接收到这个动作
  • 2、然后把这个动作传递给Controller层级
  • 3、然后把这个动作继续传递给Model,Model来处理数据的业务逻辑。
  • 5、处理完毕之后,把数据的更改反馈给View层
  • 6、View层再将这个修改再页面上渲染,从而反馈给客户
  • 4、视图可以直接和模型进行交互,直接操作模型获取数据的操作,因此这和操作对于标准层次风格来说,这就是跨层次的对接了,所以这个耦合对比较高。

MVC中存在的问题就是视图可以直接操作模型,从而导致跨层级滴哦安永,而MVP的提出,正是解决这个跨层级的问题的。它是MVC的一直变种。

2、MVP架构风格

什么是MVP?

  • MVP是MVC的变种
  • MVP实现了View和Model之间的解耦(View不直接使用Model,修改View不会影响Model)
  • MVP更好的支持单元测试, 因为逻辑在P中,可以脱离View来测试逻辑,可以将一个P用于多个V,而不需要修改P的逻辑。
  • MVP中V要处理界面事件,业务逻辑在P中,MVC中界面事件交由C处理。
997d50240e01c556ff2956b8a45e09ad73b5d1.jpg

其实现在我们前后端分离之后,如果在不使用数据双向绑定的基础上,就是典型的MVP架构风格,如果使用了数据双向绑定,那么就是MVVM架构风格了。

3、MVVM架构风格

58d92280359886ff85f998c75f500bcde296c5.jpg

MVVM跟MVP的操作思想其实没有一些本质性的区别了,只是多实现了一个双向数据绑定技术。

4、富互联网应用(RIA)

  • RIA结合了C/S架构反应速度快、交互性强的有点,以及B/S架构传播范围广以及容易传播的特性。
  • RIA简化并改进B/S架构的用户交互
  • 数据能够被缓存在客户端,从而可以实现一个比基于HTML的响应速度更快且数据往返与服务器的次数更少的用户界面。
b4cb5fc28ac348ffd9e9211954cb94d18d819f.png

其实简单来说,就是我们在打开页面时,将一些常用的数据加载到本地,然后减少与服务器的交互次数,从而提升访问速度。

主要应用于那种页面动画较多的,比游戏类的小程序,一般都会这样做,比如先加载资源,然后初始化配置,再加载某某场景数据等。就是为了后面直接访问本地更快些。

主要说明的层次架构中表现层的架构演化,后面还有SOA,微服务等架构风格,我们慢慢了解,学无止境,加油!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK