mvc、mvp、mvvm、rest、webservice和微服务

mvc、mvp、mvvm、rest、webservice和微服务MVC MVP MVVM REST WebService 微服务是软件开发中不同层面的核心概念 涵盖 前端界面架构 API 通信规范 后端服务架构 三大领域

欢迎大家来到IT世界,在知识的湖畔探索吧!

MVC、MVP、MVVM、REST、WebService、微服务是软件开发中不同层面的核心概念,涵盖 “前端界面架构”“API 通信规范”“后端服务架构” 三大领域。它们解决的问题完全不同,下面用 “生活场景类比” 逐一拆解,再明确分类和区别:

一、前端界面架构模式:解决 “界面与逻辑混在一起难维护”

MVC、MVP、MVVM 是客户端 / 前端的代码组织模式,核心目标是 “分离界面(用户看到的)和业务逻辑(背后的计算 / 数据处理)”,避免代码像 “一团乱麻”,方便后续修改和扩展。

1. MVC(Model-View-Controller):“餐厅的领班 – 服务员 – 厨房”

核心定义

把代码分为三层,各司其职:

  • Model(模型):“厨房”—— 负责数据存储和业务逻辑(比如计算购物车总价、从数据库获取用户信息),不关心界面怎么展示;
  • View(视图):“服务员”—— 负责界面展示(比如 APP 的按钮、页面文字、商品列表),只做 “展示”,不处理逻辑;
  • Controller(控制器):“领班”—— 接收用户操作(比如点击 “加入购物车”),协调 Model 和 View:告诉 Model “该做什么”(更新购物车数据),再告诉 View “该怎么更”(刷新购物车图标数量)。

工作流程(以购物 APP “加入购物车” 为例)

  1. 用户点击 “加入购物车” 按钮(View 接收操作);
  2. View 把操作传给 Controller(服务员喊领班:“客人要加购物车”);
  3. Controller 调用 Model 的 “添加商品” 方法(领班通知厨房:“做一份‘购物车添加’的逻辑”);
  4. Model 处理完成(更新购物车数据,比如数量 + 1),把结果返回给 Controller;
  5. Controller 通知 View 更新界面(领班告诉服务员:“更新购物车图标,显示数量 5”);
  6. View 刷新界面,用户看到购物车数量变化。

优缺点 & 适用场景

优点

缺点

适用场景

1. 分离界面和逻辑,代码结构清晰;
2. 历史悠久,框架成熟(如 Android 原生、Spring MVC);
3. 适合中小型界面开发,学习成本低。

1. View 和 Model 可能间接耦合(比如 Model 数据变了,View 需手动更新);
2. 复杂界面中,Controller 会变 “臃肿”(要处理大量协调逻辑)。

1. 原生 APP 开发(Android、iOS);
2. 中小型 Web 项目(如企业官网后台);
3. 对界面交互复杂度要求不高的场景。

2. MVP(Model-View-Presenter):“餐厅的专属服务员 – 客人 – 厨房”

核心定义

在 MVC 基础上优化 “解耦”,把 Controller 换成 Presenter,核心是View 和 Model 完全隔离,只能通过 Presenter 通信

  • Model(模型):还是 “厨房”—— 负责数据和逻辑,不与 View 直接交互;
  • View(视图):“客人”—— 只负责展示和接收用户操作,操作直接传给 Presenter,不调用任何逻辑;
  • Presenter( presenter):“专属服务员”—— 完全的 “中间人”:接收 View 的操作,调用 Model 处理,再把结果 “主动推给” View 更新(比如 Model 返回购物车数据,Presenter 直接告诉 View “把数量改成 5”)。

关键区别(vs MVC)

  • MVC 中,View 可能直接访问 Model(比如服务员偶尔自己去厨房问进度);
  • MVP 中,View 和 Model “完全不认识”(客人从不去厨房,只跟专属服务员沟通),解耦更彻底。

适用场景

  • 复杂交互的界面开发(如社交 APP 的聊天界面、表单多步骤提交);
  • 对代码可测试性要求高的场景(Presenter 可单独测试,不用依赖 View);
  • 典型框架:Android 的 MVP 模式、早期 Web 前端框架(如 Backbone.js)。

3. MVVM(Model-View-ViewModel):“带自动同步的智能服务员”

核心定义

在 MVP 基础上增加 “双向绑定”,让 View 和 Model 的同步 “自动化”,无需 Presenter 手动协调:

  • Model(模型):还是 “厨房”—— 数据和逻辑;
  • View(视图):“客人”—— 界面展示,操作直接触发绑定;
  • ViewModel(视图模型):“智能服务员”—— 封装 View 需要的数据和逻辑,并且与 View 建立 “双向绑定”:当 View 变化(如用户输入文字),ViewModel 自动同步到 Model(客人改需求,服务员自动通知厨房);当 Model 变化(如数据从服务器更新),ViewModel 自动同步到 View(厨房做好了,服务员自动把菜端给客人)。

核心亮点:双向绑定(自动化同步)

比如在 Vue/React 中:

  • 用户在输入框输入 “18”(View 变化),ViewModel 自动把 “年龄 = 18” 同步到 Model;
  • Model 中 “年龄” 改成 20(比如服务器返回更新),ViewModel 自动把输入框内容改成 20(View 自动更新)。

适用场景

  • 现代前端框架开发(Vue、React、Angular);
  • 界面交互频繁、数据同步多的场景(如电商商品筛选、表单实时验证);
  • 追求开发效率的项目(双向绑定减少手动同步代码)。

三者对比(MVC vs MVP vs MVVM)

维度

MVC

MVP

MVVM

核心逻辑

Controller 协调

Presenter 中间转发

ViewModel 双向绑定

View 与 Model 交互

可能间接交互

完全隔离

完全隔离(自动同步)

代码量

中等

较多(手动转发)

较少(自动同步)

适用框架

Android 原生、Spring MVC

Android MVP、Backbone

Vue、React、Angular

二、API 通信规范:解决 “不同系统间怎么传数据”

REST 和 WebService 是不同系统(如前端 APP 和后端服务器、A 公司系统和 B 公司系统)之间的通信规则,规定 “数据用什么格式传、用什么协议、怎么调用接口”。

1. WebService:“国际快递的标准流程”

核心定义

早期的 “重量级” 跨系统通信规范,基于 SOAP(Simple Object Access Protocol,简单对象访问协议),特点是 “标准化、重量级”:

  • 数据格式:必须用 XML(像国际快递的固定格式面单,结构严谨但繁琐);
  • 通信协议:基于 HTTP 或 HTTPS,但会封装额外的 SOAP 头(像快递面单外还要套一层国际物流标签);
  • 调用方式:需通过 WSDL(Web 服务描述语言)定义接口(像快递要先确认对方是否支持国际物流)。

优缺点 & 适用场景

优点

缺点

适用场景

1. 标准化程度高,支持跨语言(Java 调用 C# 的服务)、跨平台;
2. 自带安全机制(如身份验证、加密),适合企业级复杂交互。

1. 数据格式繁琐(XML 比 JSON 大,传输慢);
2. 配置复杂,性能低(重量级协议,解析耗时);
3. 不适合高并发场景(如 APP 接口)。

1. 老系统兼容(如银行、国企的遗留系统,早期开发的跨系统接口);
2. 企业间复杂交互(如供应链系统对接,需要严格的安全和格式规范)。

2. REST(Representational State Transfer):“国内快递的灵活流程”

核心定义

现在主流的 “轻量级” API 设计风格(不是协议,是设计原则),基于 HTTP 协议,特点是 “简单、灵活、高效”:

  • 核心思想:“资源导向”—— 把一切数据(用户、商品、订单)看作 “资源”,用 URL 表示资源(如/api/users/1表示 “ID 为 1 的用户”);
  • 操作方式:用 HTTP 的 4 个方法表示对资源的操作(GET 查、POST 增、PUT 改、DELETE 删);
  • 数据格式:常用 JSON(轻量、易解析,像国内快递的简单面单),也支持 XML。

示例(操作 “用户” 资源)

需求

HTTP 方法

URL

数据格式(JSON)

查用户(ID=1)

GET

/api/users/1

返回:{“id”:1,”name”:”张”,”age”:18}

新增用户

POST

/api/users

提交:{“name”:”李”,”age”:20}

修改用户(ID=1)

PUT

/api/users/1

提交:{“age”:19}

删除用户(ID=1)

DELETE

/api/users/1

无数据(或返回成功标识)

优缺点 & 适用场景

优点

缺点

适用场景

1. 轻量高效(JSON 传输快,解析简单);
2. 易于理解和开发(URL+HTTP 方法,学习成本低);
3. 适合高并发(如 APP、小程序接口)。

1. 无内置安全机制(需额外加 Token、HTTPS);
2. 不适合复杂事务(如跨多个资源的原子操作)。

1. 现代 APP / 小程序后端接口(如微信小程序、电商 APP);
2. 高并发 Web 服务(如短视频平台的用户接口、商品接口);
3. 开源 API(如天气 API、地图 API)。

两者对比(WebService vs REST)

维度

WebService

REST

数据格式

强制 XML

常用 JSON(灵活)

协议依赖

基于 SOAP(重量级)

基于 HTTP(轻量级)

性能

低(解析 XML 慢)

高(JSON + 简单协议)

适用场景

老系统、企业复杂交互

现代 APP、高并发接口

主流程度

逐渐淘汰(仅兼容老系统)

绝对主流

三、后端服务架构:解决 “大系统难扩展、难维护”

微服务是后端服务的架构理念,核心目标是把 “一个庞大的单体应用” 拆成 “多个独立的小服务”,每个服务只干一件事,避免 “牵一发而动全身”。

微服务(Microservices):“连锁餐厅的分店”

核心定义

把传统的 “单体应用”(比如一个电商系统,包含用户、订单、支付、商品所有功能)拆成多个 “微服务”,每个服务:

  • 独立运行:每个服务有自己的服务器、数据库(如 “订单服务” 单独用一个数据库,不跟 “商品服务” 共享);
  • 专注单一业务:只做一件事(“订单服务” 只处理下单、查订单、取消订单;“支付服务” 只处理支付、退款);
  • 独立部署:更新 “订单服务” 时,不用停 “商品服务”(改一家分店的菜单,不影响其他分店);
  • 服务间通信:通过 REST API 或 RPC(远程调用)互相调用(“订单服务” 要查用户信息,就调用 “用户服务” 的 API)。

对比:单体架构 vs 微服务架构(以电商为例)

单体架构

微服务架构

所有功能(用户、订单、支付)打包成一个应用,部署在一台服务器

拆成 4 个独立服务:用户服务、订单服务、支付服务、商品服务,各部署在不同服务器

共用一个数据库,改订单表可能影响商品表

每个服务有自己的数据库(订单库、用户库),数据隔离

改一个功能(如支付逻辑),需停整个应用

改支付服务,只需重启支付服务,其他服务正常运行

扩展难(要扩展就得给整个应用加服务器)

灵活扩展(订单服务压力大,只给订单服务加服务器)

优缺点 & 适用场景

优点

缺点

适用场景

1. 灵活扩展(哪里压力大就扩哪里);
2. 故障隔离(一个服务挂了,其他服务不受影响,如支付服务坏了,用户还能查商品);
3. 技术栈灵活(订单服务用 Java,支付服务用 Go,不用统一技术栈)。

1. 运维复杂(要管理多个服务、多个数据库,需用容器化工具如 Docker、K8s);
2. 服务间通信成本高(调用 API 有延迟,需处理网络故障);
3. 数据一致性难保证(如订单服务下单后,商品服务要减库存,需协调)。

1. 大型互联网系统(如淘宝、京东、抖音,业务复杂、并发高);
2. 业务迭代快的项目(如创业公司的核心业务,需频繁更新功能);
3. 需要灵活扩展的场景(如电商双 11,订单服务需临时加 100 台服务器)。

四、概念分类总结:别再混淆!

很多人会把这些概念混为一谈,核心是没分清它们的 “领域”—— 其实它们解决的是软件开发不同环节的问题:

分类

包含概念

解决的核心问题

应用层面

前端界面架构模式

MVC、MVP、MVVM

界面与业务逻辑分离,方便维护

客户端 / 前端(APP、Web 页面)

API 通信规范

REST、WebService

不同系统间(前后端、跨公司)怎么传数据

系统间通信

后端服务架构

微服务

大系统拆成小服务,实现灵活扩展和故障隔离

后端服务器

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/145959.html

(0)
上一篇 29分钟前
下一篇 4分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信