本文聚焦系统架构师案例题中的系统建模部分重点说明 UML、E-R 图和 DFD 分别想表达什么、各自适合回答什么问题、彼此容易混淆的边界在哪里以及在案例题里遇到题干描述时应如何快速判断该用哪一种图。学习这一章时最好不要把它理解成“记一堆图形符号”。真正重要的是面对一个业务系统你能不能选对视角把需求、交互、流程、状态、数据结构和数据流分别画清楚。一、先建立整体认识很多人学系统建模会觉得乱原因不是图太多而是没有分清这些图各自在回答什么问题。同样是“订单系统”不同图看到的其实是不同侧面产品经理关心“用户能做什么”这更像用例图架构师关心“下单时哪些对象按什么顺序交互”这更像时序图业务分析师关心“订单从创建到支付到发货如何流转”这更像活动图领域建模时关心“订单、用户、商品之间是什么关系”这更像 E-R 图分析数据加工过程时关心“数据从哪里来经过哪些处理又流向哪里”这更像 DFD所以系统建模不是在画“同一张图”而是在用不同视角描述同一个系统。可以先把这章压缩成一句话用例图看功能边界时序图和通信图看对象协作活动图看流程状态图看生命周期E-R 图看数据结构DFD 看数据流动只要先把这个总框架建立起来后面的内容就不容易混。二、UML 图到底在解决什么问题1. 先记住 UML 最常考的几类图UML 是统一建模语言本质上是一套用图形表达系统的标准方法。案例题里不是所有 UML 图都常考高频的主要是下面几种图它最关心什么最适合回答的问题用例图系统功能与外部参与者谁在用系统系统提供了哪些功能时序图交互的时间顺序谁先调用谁消息按什么顺序走通信图对象之间的链接关系哪些对象相互协作消息沿哪些连接传递活动图业务流程和并发业务步骤怎么推进哪里分支哪里并行状态图对象生命周期一个对象会经历哪些状态因什么事件切换如果题目是在问“这个系统有什么功能”“有哪些外部角色”不要急着画动态过程那多半应该先想到用例图如果题目是在问“提交订单后依次发生了什么调用”那重点就会落到时序图。2. 用例图为什么适合讲需求边界用例图最适合回答的是系统对外提供了哪些能力谁会来使用这些能力。比如在一个在线教育平台里学员可以选课、学习、提交作业教师可以发布课程、批改作业支付平台可能作为外部系统参与支付这时最重要的不是内部怎么实现而是先把系统边界和参与者关系画出来。用例图就是干这个的。它的核心元素不多元素含义怎么理解参与者 Actor与系统交互的外部实体可以是人也可以是外部系统用例 Use Case系统提供的一项功能例如“下单”“支付”“查询订单”关联参与者和用例之间的联系谁可以触发这个功能案例题里最容易考的是用例之间的三种关系关系含义记忆方式include必须复用主用例一定会调用被包含用例extend条件扩展在特定条件下才追加某个行为generalization泛化继承一般与特殊的关系怎么区分include和extendinclude更像“公共必做步骤”例如“提交订单”一定包含“校验商品库存”extend更像“可选增强步骤”例如“支付成功后”才可能触发“发送优惠券”考试识别信号题干强调“用户、管理员、外部系统”等角色题干强调“系统提供的功能”问的是需求范围而不是内部调用细节这时优先想到用例图。3. 时序图和通信图为什么总被放在一起考这两种图描述的是同一类事情:对象之间如何协作。区别在于观察重点不同。3.1 时序图更关注“先后顺序”时序图适合表达一条业务链路是如何按时间展开的。比如“用户提交订单”这件事可能会经历前端调用订单服务订单服务调用库存服务库存服务返回校验结果订单服务调用支付服务支付服务返回支付状态如果你想把“谁先发生、谁后发生、谁等待谁”讲清楚时序图最好用。时序图里的高频元素包括元素作用对象/参与者参与交互的实体生命线表示对象在交互期间持续存在激活条表示对象正在执行某个操作消息表示一次调用或返回高频考点是三类消息消息类型含义更直观的理解同步消息发送方等待接收方处理完成像普通方法调用异步消息发送方发出后继续往下执行像发消息、投递任务返回消息表示调用结果返回把处理结果带回来另一个常考点是交互片段片段作用常见题意opt单条件可选执行“如果满足条件则执行”alt多分支互斥选择“成功走一条失败走另一条”loop循环执行“重复处理直到满足条件”par并行执行“两个动作同时进行”break中断后转出“一旦异常就终止当前流程”critical临界区“这一段不能被打断”ref引用其他交互“这里省略引用另一张图”其中最常见的是opt和altopt是一条可选分支alt是多条互斥分支3.2 通信图更关注“谁和谁有联系”通信图在 UML 1 中也常叫协作图。它同样描述对象间的消息传递但更强调对象之间原本就有什么连接关系。如果说时序图像在看一段录像通信图更像在看一张协作关系网。比如在订单场景里通信图更容易看出前端和订单服务有连接订单服务和库存服务有连接订单服务和支付服务有连接消息沿这些连接按编号传递所以通信图更适合表达“协作结构”而不是详细的时间轴。3.3 两者怎么区分和选用维度时序图通信图核心关注点时间顺序对象链接关系顺序表达方式自上而下时间轴依靠消息编号适合场景强调调用先后、等待、返回强调对象协作结构和职责分配阅读体验顺序直观结构直观标准答法可以这样写若需要描述对象交互的先后顺序和动态过程应采用时序图若需要描述对象之间的组织关系和协作结构应采用通信图4. 活动图为什么适合讲业务流程活动图描述的是“事情怎么一步一步流转”。它很像流程图但比普通流程图更适合软件系统因为它能表达并发、职责划分和流程汇合。比如请假流程可能是员工提交申请系统校验剩余假期部门主管审批人事归档系统通知申请人如果其中“消息通知”和“日志记录”可以并行执行活动图就比普通文字描述更清楚。活动图中的常见元素包括元素含义初始节点流程开始终止节点流程结束活动/动作一个处理步骤决策节点条件分支合并节点条件分支重新汇合分叉/汇合并行开始与并行结束泳道把不同角色或部门的职责分开活动图特别适合的场景跨角色协作流程审批流、工单流、订单履约流有分支、有并发的业务过程考试识别信号题干强调“流程步骤”“审批流”“业务处理过程”图里出现泳道、分支、并发问的是“流程怎么走”而不是“对象之间怎样发消息”5. 状态图为什么适合看对象生命周期状态图描述的是某个对象从创建到结束中间经历了哪些稳定状态以及是什么事件把它从一个状态推到另一个状态。订单场景最典型待支付已支付已发货已完成已取消这里重点不是流程步骤而是“订单这个对象当前处于什么状态”。同样是“取消订单”在待支付状态可以直接取消在已发货状态可能就不允许取消这就是状态建模的价值。状态图中的关键元素包括元素含义状态对象在某个时刻的稳定条件初始状态生命周期起点终止状态生命周期终点转换状态之间的迁移事件/触发导致状态变化的原因守卫条件转换发生前必须满足的条件动作转换时执行的行为和活动图怎么区分活动图看“流程步骤”状态图看“对象状态”如果题目给你的是一个业务对象在不同阶段的变化优先想到状态图如果题目给你的是整条业务流程的执行路径优先想到活动图。三、E-R 图到底在表达什么数据结构1. 为什么数据库设计离不开 E-R 图当业务需求逐渐稳定后系统迟早要落到数据结构设计。你要知道系统里有哪些核心对象、它们各自有什么属性、彼此之间是什么关系这时 E-R 图就派上用场了。它回答的是现实业务里的事物如何被抽象成数据库里的实体和联系。以电商系统为例用户是实体订单是实体商品是实体“用户下订单”“订单包含商品”是联系E-R 图本质上服务于数据库概念设计。2. E-R 图的核心元素元素含义常见图形实体可以独立识别的业务对象矩形属性实体的特征椭圆联系实体之间的业务关系菱形3. 联系类型怎么判断联系类型含义典型例子1:1一边一个另一边也一个用户与身份证1:N一边一个另一边多个部门与员工M:N两边都可能多个学生与课程订单与商品题目里如果出现“一个部门有多个员工”“一个用户可有多个收货地址”一般就是1:N如果出现“两边都能重复出现”就要警惕M:N。工程上还有一个很重要的落地判断M:N关系在关系数据库里通常要拆成中间表例如“订单和商品”通常会拆出“订单明细”这样的关联实体。4. 常见扩展概念怎么理解概念含义怎么理解主键唯一标识实体的属性像实体身份证外键引用其他实体主键的属性用来建立表之间关联弱实体依赖其他实体存在自身不能完全独立标识派生属性可以通过其他属性算出如年龄可由出生日期推导多值属性一个属性可取多个值如一个人多个联系电话5. 考试里怎么识别 E-R 图题题干强调“实体、属性、联系”要求做数据库概念结构设计要求判断一对一、一对多、多对多要求识别主键、外键或补全实体关系如果题目关注的是“数据之间的静态关系”一般就是 E-R 图视角而不是 DFD 视角。四、DFD 为什么强调数据怎么流动1. DFD 和 E-R 图最容易混但关注点完全不同很多人会把 E-R 图和 DFD 混在一起因为两者都和“数据”有关。但它们描述的不是同一件事。E-R 图强调数据对象之间的静态关系DFD 强调数据在系统中的流入、加工、存储和流出可以这样理解E-R 图像在回答“系统里有什么数据对象”DFD 像在回答“数据进入系统后经历了什么处理”2. DFD 的四大元素元素含义怎么理解外部实体系统外部的数据来源或去向人、外部系统、第三方平台加工对数据的处理过程校验、转换、计算、汇总数据流数据在元素之间的流动输入、输出、传递的数据数据存储数据被保存的位置文件、库表、存储介质比如在报销系统中员工提交报销单是外部输入报销审核是加工报销单数据在节点间传递是数据流报销数据库是数据存储DFD 不关心控制逻辑细节所以它通常不去表达循环、分支代码、对象消息细节而是抓住“数据怎么走”。3. 分层分解为什么是 DFD 的高频考点DFD 支持从粗到细分层描述系统。常见层次包括顶层图把整个系统当成一个总加工只展示它和外部实体之间的数据交换0 层图把总加工拆成若干主要加工1 层图、2 层图继续细化某个加工案例题里经常会问你某个分解是否正确关键就看平衡原则。所谓平衡就是父图中某加工的输入输出数据流到了子图中仍要能对应得上不能父图里有一个输入子图里忽然多出一个莫名其妙的新出口4. DFD 常见规则怎么记规则原因外部实体之间不能直接连数据流那说明数据没经过系统处理数据存储之间不能直接连数据流存储之间应通过加工发生作用加工必须既有输入也有输出否则加工没有意义数据流应有名称否则不知道流动的是什么父图与子图保持平衡保证分解前后语义一致5. 考试里怎么补 DFD做 DFD 题时顺序通常比死记符号更重要可以按下面思路处理先找外部实体看题干里有哪些人、部门、外部系统再找加工看题干里有哪些处理动作再找数据流看每个加工的输入和输出是什么最后补数据存储看哪些数据需要持久化回头检查父子图是否平衡、有没有非法直连五、这些图在题目里到底怎么选题目要表达的重点优先选择的图系统有哪些功能谁在使用用例图对象之间的调用先后顺序时序图对象之间的协作结构通信图业务流程、审批流、并行步骤活动图某个对象的生命周期变化状态图数据实体、属性和联系E-R 图数据的流入、加工、存储和流出DFD如果还拿不准可以反问自己一句我现在更想说明“谁和谁交互”还是“数据怎么流”我现在更想说明“功能边界”还是“对象调用过程”我现在更想说明“流程步骤”还是“状态变化”一旦问题问对了图的选择通常就不难了。六、怎么考怎么答1. UML 图选择题题干如果强调“用户、管理员、外部系统、功能模块”常考用例图如果强调“对象之间消息交互顺序”常考时序图如果强调“对象之间的组织和协作关系”常考通信图。2. 时序图细节题高频问法包括时序图有哪些消息类型条件分支该用opt还是alt缺失的对象、消息、返回箭头如何补全3. 活动图与状态图标准答法题干如果围绕“业务过程如何推进”通常考活动图如果围绕“对象状态如何变化、由什么事件触发切换”通常考状态图。4. E-R 图标准答法高频问法包括根据业务描述抽取实体和联系判断联系类型识别主键、外键、弱实体将多对多联系转化为中间实体5. DFD 标准答法高频问法包括补全外部实体、加工、数据流、数据存储判断分层分解是否正确检查父图与子图是否平衡判断是否存在非法数据流连接七、答题模板1. 时序图与通信图选型题时序图主要用于描述对象之间交互的时间顺序和动态过程适合表现消息的先后次序通信图主要用于描述对象之间的组织关系和协作结构适合表现对象之间的链接关系与职责分配。2. 用例图关系辨析题include表示基础用例必须包含某公共行为被包含用例会被重复复用extend表示在特定条件下对基础用例进行可选扩展因此前者强调必选复用后者强调条件触发。3. 活动图与状态图区分题活动图主要描述业务流程和处理步骤强调流程推进、分支、并发和泳道职责状态图主要描述对象在生命周期中的状态变化强调状态、事件、守卫条件和状态转换。4. E-R 图题E-R 图用于数据库概念结构设计通过实体、属性和联系描述系统中的数据对象及其关系。分析时应先识别核心实体再判断实体间联系类型最后确定主键、外键及必要的中间实体。5. DFD 题DFD 用于描述数据在系统中的流动、加工与存储。作图时应先确定外部实体再确定加工、数据流和数据存储并检查加工是否既有输入又有输出以及父图与子图之间是否保持平衡。