news 2026/4/25 17:16:00

【案例题-知识点】架构风格与架构模式(2):高频架构模式与选型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【案例题-知识点】架构风格与架构模式(2):高频架构模式与选型

文章目录

    • 一、高频架构模式
      • 1. MVC:Spring MVC
      • 2. MVP 与 MVVM:Android MVP、Vue MVVM
      • 3. 微内核:VS Code 插件体系
      • 4. SOA:企业 ESB 集成平台
      • 5. 微服务:订单/库存/支付拆分
      • 6. C/S 与 B/S:证券终端 vs OA Web
    • 二、架构选型思路

一、高频架构模式

除了五大基础架构风格,案例题还经常直接考具体模式或系统形态。真正难的不是背定义,而是看清这些模式各自解决的是什么矛盾,以及题干里的“信号词”到底在指向哪一种组织方式。

1. MVC:Spring MVC

怎么理解:MVC 解决的核心问题,不是“把系统分三层”这么简单,而是把输入处理、业务状态、界面展示拆开,避免界面代码和业务代码互相缠绕。

  • Model管数据和业务规则
  • View负责展示结果
  • Controller接住用户输入,决定调用哪个业务,再把结果交给 View

在 Web 系统里,这通常表现为:请求先进入Controller,再调用Service或领域对象处理业务,最后返回页面或 JSON。它的价值在于把“怎么点页面”和“业务怎么运转”分开。

为什么会出现:早期很多应用把事件处理、页面刷新、业务计算全写在一起。这样做一开始开发很快,但页面一多,任何一个按钮点击都可能牵出一串业务逻辑,结果就是难测、难改、难协作。MVC 的出现,本质上是在解决界面变化频繁,而业务规则也需要稳定演进这一矛盾。

何时用,怎么考:MVC 适合页面较多、交互明确、展示逻辑和业务逻辑都需要长期维护的系统。题干里如果出现请求先到控制器、Model 管业务、View 负责显示、前后职责分离,通常就是在指向 MVC。

优点是分工清楚、业务可测试、前后协作边界明确;缺点是样板代码容易变多,业务一旦堆进 Controller,就会迅速出现“胖 Controller”问题。因此工程上常常在 MVC 之外再引入Service层,避免控制器变成新的大杂烩。

考试信号工程落地
Controller 接请求、Model 管业务、View 展示结果Spring MVCASP.NET MVCRails;前后端分离时BFF也常承担类似控制器职责

2. MVP 与 MVVM:Android MVP、Vue MVVM

怎么理解:MVP 和 MVVM 都不是凭空冒出来的,它们都是在 MVC 基础上继续往前走一步,专门解决富客户端界面状态太复杂的问题。

服务端 MVC 面对的是一次 HTTP 请求,请求进来、处理完、响应回去,这个生命周期很短。桌面应用、移动 App、重型前端却不是这样: 一个页面要持续存在,要处理输入框、滚动、异步回调、加载状态、按钮联动、错误提示。此时如果还把很多逻辑写在页面代码里,页面很快就会变成“既管显示,又管业务,还管流程”的混合体。

MVP 的思路是把这些逻辑集中到Presenter。View 只负责把“发生了什么”告诉 Presenter,再由 Presenter 决定“应该显示什么”。MVVM 的思路则更进一步,它不强调界面去接命令,而是强调界面直接绑定一份状态,由ViewModel维护这份状态,状态变了,界面跟着变。

它们到底差在哪:最容易混淆的地方,不是名字,而是谁在主导界面变化。

模式业务主要放在哪界面怎么更新更适合的场景
MVCController + ModelController/Model 配合刷新 View传统 Web 交互
MVPPresenterPresenter 明确调用 View 接口想强化隔离、强调单测的客户端
MVVMViewModelView 绑定状态,状态变则界面变表单多、联动多、声明式 UI

一句话记忆:

  • MVP是“界面不做决定,Presenter 来指挥”
  • MVVM是“界面不再手工刷新,而是跟着状态走”

何时用,怎么考:题干如果强调Presenter 完全中介、View 不碰 Model、接口回调刷新界面,优先判断为MVP。如果强调ViewModel、绑定、双向绑定、响应式更新、状态驱动视图,优先判断为MVVM

MVP 的好处是逻辑集中、测试清晰,坏处是 Presenter 很容易越来越厚。MVVM 的好处是状态统一、胶水代码更少,坏处是绑定链条一长,调试就不再直观。工程上二者并不互斥,遗留客户端常保留 MVP,新页面和声明式 UI 更容易落到 MVVM。

考试信号工程落地
Presenter 中介、View 不碰 ModelAndroid 经典 MVP
ViewModel、绑定、命令、可观察状态Android ViewModel + LiveData/FlowWPFVueReact Hooks

3. 微内核:VS Code 插件体系

怎么理解:微内核解决的不是“分层”问题,而是稳定核心和快速变化能力怎么共存的问题。

如果一个产品要活很多年,要让第三方接入,还要按客户组合不同能力,那么最危险的做法就是把所有功能都写进主程序。这样每加一个能力都要动核心,核心越改越重,最终任何新需求都可能影响全局。微内核的做法是反过来:把真正稳定、必须统一管理的能力留在核心里,把变化快、定制强、可选装的能力做成插件。

因此,微内核最关键的一句话是:核心定义规则和扩展点,插件填充具体能力

何时用,怎么考:它适合生命周期长、产品线多、插件生态明显、第三方扩展强的系统。题干如果反复出现插件、扩展点、SPI、核心极小、第三方扩展不改核心、可插拔,通常就该优先想到微内核。

它的优势是核心稳定、扩展灵活、长尾需求可以由插件生态承接;它的代价则在于接口设计必须非常克制,一旦扩展点设计失误,后续就会积累大量兼容债。同时,插件隔离、沙箱、版本冲突也都会带来真实的工程成本。

考试信号工程落地
内核小、扩展点、插件接入、能力后装VS Code / JetBrains / Eclipse插件体系、Chromium扩展、K8s CNI/CSI/CRI

4. SOA:企业 ESB 集成平台

怎么理解:SOA 的出发点不是把一个新系统拆细,而是把企业里本来就存在的多套系统组织起来。

很多企业并不是只有一个应用,而是财务、人事、ERP、供应链、CRM 各有一套,技术栈、接口格式、数据库结构都不同。真正的问题不是“怎么把一个应用写得更优雅”,而是“这些已经存在的系统怎么在不推倒重来的情况下协同工作”。SOA 的答案是:先把能力包装成服务,再用统一契约、注册目录和集成层把它们接起来。

这里的关键角色通常有三个:

角色作用
服务提供者提供可调用的业务能力和契约
服务消费者按契约调用能力,不依赖内部实现
注册中心/服务目录管理服务注册、发现和元数据

很多教材把ESB讲得很重,原因就在这里。ESB 不是普通消息中间件,而是企业集成的中心点,负责路由、协议转换、服务编排,以及日志、鉴权、限流等横切治理。

为什么会出现:SOA 解决的是遗留系统众多、技术异构、集成成本高、治理分散的问题。它更强调“把企业能力纳入统一治理”,而不是“让每个小团队各自自治”。

何时用,怎么考:题干如果强调ESB、服务契约、服务目录、异构系统集成、统一治理、编排、遗留系统对接,优先判断为SOA。它适合大企业集成、合规要求强、组织上需要统一入口和统一治理的场景。

它的优点是遗留系统能逐步纳管、服务边界更清晰、日志安全路由可集中治理;它的缺点是 ESB 容易成为中心瓶颈,组织流程通常会更重,排障也更依赖中间层。

考试信号工程落地
ESB、契约、统一治理、异构集成IBM WebSphereOracle OSBMule ESB、企业集成平台

5. 微服务:订单/库存/支付拆分

怎么理解:微服务经常和 SOA 混在一起,但两者的出发点并不一样。

微服务面对的通常不是“企业里已有很多异构系统”,而是“一个产品自己长得太大了”。系统最初可能是单体应用,团队小的时候开发很顺手;等团队变大以后,就会出现发布互相卡住、回归成本越来越重、一个模块故障拖垮全站、热点能力没法单独扩容等问题。微服务的核心思想,就是按业务边界把这个大系统拆成多个独立服务,让它们独立开发、独立部署、独立扩缩容。

从工程视角看,它不只是“拆服务”,而是配套带来一整套分布式问题:服务发现、网关、链路追踪、熔断限流、配置管理、最终一致性、灰度发布。也正因为这些配套成本很高,微服务不是越早拆越好,而是当单体的协作成本已经明显高于分布式成本时才值得拆。

和 SOA 到底差在哪:最容易区分二者的方法,是先看它在解决哪个层面的复杂性。

维度SOA微服务
主要问题企业异构系统集成单一产品内部过大
组织方式集中治理更强团队自治更强
中枢特征常见 ESB、编排、目录常见网关、注册发现、服务网格
服务粒度相对较粗相对较细
数据方式共享库更常见一服务一库更常见

何时用,怎么考:题干如果强调独立部署、容器化、每服务独立库、限界上下文、团队自治、K8s、网关、熔断、链路追踪,通常优先判断为微服务。如果同时还在讲企业遗留集成、中央 ESB、统一编排,则应更偏向SOA

微服务的优点是业务边界清楚,发布和扩容可以局部化,故障影响面也更容易控制;缺点是网络失败会成为日常问题,跨服务事务无法依赖单库事务解决,监控、日志和链路追踪如果跟不上,系统会迅速失去可观测性。

考试信号工程落地
独立部署、轻协议、自治团队、独立库Spring CloudGo 微服务K8sAPI 网关Jaeger/ZipkinKafka/RabbitMQ

6. C/S 与 B/S:证券终端 vs OA Web

怎么理解:C/S 和 B/S 经常被当成“老知识点”,但案例题真正考的不是名词,而是客户端能力放在哪里、升级责任由谁承担

C/S的关键是专用客户端。客户端需要安装,通常承担更多本地渲染、计算、缓存或设备访问能力。B/S的关键是浏览器作为通用客户端,页面和脚本由服务端统一交付,升级更多集中在服务端完成。

所以它们的区别,本质上不是“有没有前端”,而是系统把多少能力放在本地、把多少运维责任收回到服务端

维度C/SB/S
客户端专用客户端,通常需安装浏览器即可
升级方式客户端和服务端都要管主要在服务端统一升级
本地能力强本地计算、离线、外设支持更强零安装、广覆盖更强
常见场景证券终端、CAD、游戏OA、运营后台、政务办理

何时用,怎么考:题干如果强调零安装、统一升级、分支机构快速上线、浏览器访问,通常偏向B/S;如果强调专用客户端、离线能力、本地计算、外设依赖、胖客户端,通常偏向C/S

真正答题时,不要把它们写成绝对对立。很多现实产品是混合形态,例如Electron是 Web 技术栈加桌面分发,小程序在体验上像 App,在运维上又很像 B/S。考试只要抓住“谁负责升级、客户端是否专用、是否依赖本地能力”这三个判断点,就不容易写偏。

考试信号工程落地
胖/瘦客户端、安装方式、升级责任原生桌面客户端移动 AppH5/PWAElectron

二、架构选型思路

题干/业务信号适合的风格考试落笔(关键词)工程锚点(可举 1 个)
数据需要经过多步顺序处理管道-过滤器过滤器独立、数据沿管道、可增量Flink 算子链、网关 Filter、编译器各遍
系统分为展示、业务、数据三层分层上层依赖下层、接口隔离、职责分离Controller→Service→DAO、DDD 分层
需要高度松耦合、异步通信事件驱动 / 发布-订阅隐式调用、发布订阅、异步解耦Kafka、Outbox、领域事件
AI 类问题、多种不确定推理策略黑板知识源、黑板、控制器、迭代求精多路召回融合、多模型协同
规则频繁变化、需要动态执行解释器 / 规则引擎可配置、动态规则、解释执行Drools、营销规则台、脚本热更
需要插件化扩展微内核核心稳定、插件可插拔VS Code 扩展点、策略 SPI
多团队独立开发、独立部署微服务细粒度服务、独立进程与库K8s、gRPC、每服务独立库
异构系统集成、标准化接口SOAESB、服务契约、企业治理集成平台、遗留系统 Web Service
Web 前端交互复杂MVC / MVVM表现与逻辑分离、绑定Vue/React、MVVM 双向绑定
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 17:15:22

跨越鸿沟:在Ubuntu上通过Wine部署专业Windows开发工具链

1. 为什么要在Ubuntu上运行Windows开发工具? 作为一名嵌入式开发者,我深知专业工具链的重要性。Keil MDK、IAR Embedded Workbench这些IDE在Windows环境下运行良好,但当我们切换到Ubuntu这样的Linux系统时,就会面临一个尴尬的局面…

作者头像 李华
网站建设 2026/4/25 17:13:34

STM32LL库实战第四讲——DMA双缓冲与串口空闲中断高效数据搬运

1. 为什么需要DMA双缓冲与串口空闲中断? 在嵌入式开发中,处理高速串口数据流是个常见需求。我做过一个工业传感器项目,传感器每秒钟会发送上百组不定长数据包。最初用传统单缓冲DMA方案,经常遇到两个头疼问题:一是数据…

作者头像 李华
网站建设 2026/4/25 17:10:07

Rose65蓝牙多设备切换与深度休眠设置详解:告别断联和耗电烦恼

Rose65蓝牙多设备切换与深度休眠设置详解:告别断联和耗电烦恼 对于追求高效办公的键盘玩家来说,Rose65凭借其蓝牙5.2多设备切换能力成为生产力利器。但实际使用中,不少用户会遇到设备切换混乱、蓝牙断联或续航骤降的困扰。本文将深入解析PCB层…

作者头像 李华
网站建设 2026/4/25 17:01:20

城市GEO优化服务效果怎么算?3个核心指标帮你ROI翻倍

城市GEO优化服务效果怎么算?3个核心指标帮你ROI翻倍在本地化营销和精细化运营成为主流的今天,城市GEO优化服务已成为企业,特别是拥有实体门店或区域服务商家的核心竞争力。它通过对特定城市甚至更细粒度地理区域的用户进行定向触达、内容优化…

作者头像 李华