草庐IT

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

IT动力 2023-04-17 原文

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

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

  • 表现层:由于用户进行交互,比如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

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

动作解读(了解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处理。

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

3、MVVM架构风格

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

4、富互联网应用(RIA)

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

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

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

5、小结

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

有关软件架构设计:B/S层次架构之MVC/MVP/MVVM的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  3. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  4. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  5. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  6. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  7. ruby-on-rails - 设计注册确认 - 2

    我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:

  8. ruby - Ruby 和 Ruby on Rails 中的三层架构 - 2

    我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby​​1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails

  9. ruby-on-rails - 设计通过 reset_password_token 获取用户 - 2

    我正在尝试创建密码规则来设计可恢复的密码更改。我通过passwords_controller.rb做了一个父类(superclass),但我需要在应用规则之前检查用户角色,但我所拥有的只是reset_password_token。 最佳答案 假设您的模型是用户:User.with_reset_password_token(your_token_here)Source 关于ruby-on-rails-设计通过reset_password_token获取用户,我们在StackOverflow

  10. ruby - sinatra 框架的 MVC 模式 - 2

    我想开始使用“Sinatra”框架进行编码,但我找不到该框架的“MVC”模式。是“MVC-Sinatra”模式或框架吗? 最佳答案 您可能想查看Padrino这是一个围绕Sinatra构建的框架,可为您的项目提供更“类似Rails”的感觉,但没有那么多隐藏的魔法。这是使用Sinatra可以做什么的一个很好的例子。虽然如果您需要开始使用这很好,但我个人建议您将它用作学习工具,以对您来说最有意义的方式使用Sinatra构建您自己的应用程序。写一些测试/期望,写一些代码,通过测试-重复:)至于ORM,你还应该结帐Sequel其中(imho

随机推荐