基于Spring的论坛系统-前置知识

一、软件生命周期整体框架

软件生命周期就像一个项目从 "点子" 到 "退役" 的完整旅程,分成了 获取过程、开发过程、运行过程、维护过程 四大块,一共 10 个阶段。


二、各阶段详解

1. 可行性研究(获取过程)

  • 核心任务判断 "做不做"。分析技术、经济、人力、时间等条件,评估项目是否可行,产出《可行性研究报告》。
  • 生活类比:你想做西红柿炒鸡蛋,先看看家里有没有鸡蛋、西红柿,自己会不会做,有没有时间,这就是可行性研究。
  • 交付成果可行性研究报告、项目开发计划

2. 需求分析(获取过程)

  • 核心任务明确 "做什么"。和用户反复沟通,把模糊的需求转化为清晰、可验证的《软件需求规格说明书》,这是整个开发的 "地基"。
  • 生活类比:确定西红柿炒鸡蛋是要酸甜口还是咸口,放不放糖,要不要加葱花,做多大一份。
  • 交付成果软件需求规格说明书(SRS)。

3. 概要设计(开发过程)

  • 核心任务规划 "整体架构"。把系统拆分成多个模块,定义模块之间的关系、接口,设计全局数据库 / 数据结构,制定集成测试计划。
  • 生活类比:规划炒菜的步骤:先备菜(切西红柿、打鸡蛋),再炒蛋,最后混合翻炒。确定用什么锅、什么火。
  • 交付成果概要设计文档、数据库设计文档

4. 详细设计(开发过程)

  • 核心任务细化 "每个模块怎么做"。对每个模块的功能、算法、数据结构进行详细描述,让程序员能直接照着写代码。
  • 生活类比:精确到鸡蛋要打多久,西红柿要切多大块,油热到什么程度下锅,炒多久出锅。
  • 交付成果详细设计文档、模块设计说明书

5. 实现(开发过程)

  • 核心任务"写代码 + 单元测试"。程序员根据详细设计文档编写可运行的代码,并对自己负责的模块进行单元测试,确保每个小功能都正常。
  • 生活类比:按照菜谱切菜、打火、倒油、炒蛋、炒西红柿,完成烹饪。
  • 交付成果可运行的程序代码、单元测试报告

6. 组装(集成)测试(开发过程)

  • 核心任务把多个模块 "拼起来" 测试。验证模块之间的接口是否正常,数据传递是否正确,确保整体能协同工作。
  • 生活类比:把炒好的鸡蛋和西红柿混在一起翻炒,尝尝味道是否融合,有没有出现 "鸡蛋太老、西红柿太生" 的问题。
  • 交付成果集成测试报告、缺陷跟踪记录

7. 确认测试(开发过程)

  • 核心任务验证 "是否符合需求"。由用户或测试人员按照《需求规格说明书》对整个系统进行验收测试,确认功能、性能都满足要求。
  • 生活类比:邀请家人试吃,看看这道菜是否符合之前约定的 "酸甜口、不放葱花" 的要求。
  • 交付成果:确认测试报告、用户验收报告。

8. 使用(运行过程)

  • 核心任务 :"上线交付"。把软件部署到用户的运行环境中,正式投入使用。同时收集用户反馈和使用中发现的问题。
  • 生活类比:把做好的西红柿炒鸡蛋端上桌,家人开始吃,你观察大家的反应,记录谁觉得咸了、谁觉得淡了。
  • 交付成果部署文档、用户问题报告

9. 维护(维护过程)

  • 核心任务 :"持续优化"。修复使用中发现的 Bug,根据用户需求增加新功能,适配新的硬件 / 软件环境,让软件持续满足用户需要。
  • 生活类比:家人说太酸了,你下次少放醋;有人想吃辣,你下次加点辣椒;锅坏了,换个新锅再做。
  • 交付成果维护记录、版本更新说明

10. 退役(维护过程)

  • 核心任务 :"停止服务"。当软件不再被使用、或被新系统替代时,终止维护和支持,进行数据迁移、系统下线。
  • 生活类比:大家吃完了,你把盘子收走、洗碗,这道菜的 "生命周期" 就结束了。
  • 交付成果退役报告、数据归档记录

三、C/S、B/S架构

  • C/S架构即客户端/服务器架构模式
  • B/S架构即浏览器/服务器架构模式

1. C/S 架构(Client/Server)

  • 核心特征 :需要在用户设备上安装专用客户端软件,与服务器直接通信(如 Socket 或数据库连接),是一种两层架构。
  • 适用场景 :面向固定用户群体,对响应速度和个性化要求高 的场景。
    • 典型应用:QQ、微信客户端、网络游戏。
  • 优点
    1. 性能好:大量业务逻辑在本地处理,响应速度快,能充分利用本地计算资源。
    2. 个性化强:客户端可深度定制界面和功能,满足特定用户的复杂需求。
    3. 安全性高:用户群体固定,数据传输和访问权限可控性强。
  • 缺点
    1. 部署成本高:每台设备都需要安装客户端,升级时需逐个更新。
    2. 维护繁琐:客户端出现问题时,需要对每台设备进行排查和修复。

2. B/S 架构(Browser/Server)

  • 核心特征 :以浏览器作为统一客户端所有业务逻辑都在服务器端处理,是一种三层架构(浏览器 → Web 服务器 → 数据库),通过 HTTP 协议通信。
  • 适用场景 :面向公开用户、需要快速部署和跨平台访问的场景。
    • 典型应用:各类网站(如淘宝、知乎)、在线办公系统、云盘。
  • 优点
    1. 零客户端维护:用户只需安装浏览器,无需额外安装或升级客户端。
    2. 维护成本低:所有更新和维护都在服务器端完成,一次升级全用户生效。
    3. 扩展性好:业务逻辑集中在服务器,新增功能或扩容只需对服务器进行操作。
  • 缺点
    1. 服务器压力大:所有计算和业务处理都依赖服务器,对服务器性能和安全要求高。
    2. 浏览器兼容性问题:不同浏览器对网页标准的支持存在差异,可能影响用户体验。
    3. 网络依赖强:完全依赖网络连接,离线状态下无法使用。

四、相关技术及⼯具

4.1 服务器端技术

这部分是整个项目的 "后台大脑",负责处理业务逻辑、数据交互和接口提供。

  • Spring:Java 开发的 "全家桶" 框架,提供了依赖注入(DI)和面向切面编程(AOP)等核心能力,是构建企业级应用的基础。
  • Spring Boot:基于 Spring 的快速开发框架,通过 "约定大于配置" 的理念,帮你省去繁琐的配置,快速搭建和运行项目,大大提升开发效率。
  • Spring MVC:Spring 家族中的 Web 层框架,负责处理 HTTP 请求、路由分发和视图渲染,是构建前后端分离接口的核心。
  • MyBatis:持久层框架,通过 XML 或注解方式将 SQL 与 Java 代码解耦,让数据库操作更灵活、更易维护,比传统的 JDBC 效率更高。

4.2 浏览器端技术

这部分是用户直接接触的 "门面",负责页面展示和交互体验。

  • HTML, CSS, JavaScript:前端开发的三剑客。HTML 负责页面结构,CSS 负责样式美化,JavaScript 负责交互逻辑。
  • jQuery:一个轻量级的 JavaScript 库,封装了大量常用的 DOM 操作和 AJAX 请求,让前端开发更简洁高效。
  • Bootstrap:响应式 CSS 框架,提供了丰富的组件和栅格系统,能快速搭建出美观且适配不同设备的网页。

4.3 数据库

  • MySQL:开源的关系型数据库,性能稳定、社区活跃、生态完善。

4.4 项目构建工具

  • Maven :Java 项目的依赖管理和构建工具,通过 pom.xml 文件统一管理项目依赖,自动下载所需 Jar 包,并能一键打包、编译和部署。

4.5 版本控制工具

  • Git + GITEE:Git 是目前最流行的分布式版本控制系统,用于追踪代码变更、多人协作开发;用来存放和管理 Git 代码仓库。

五、软件需求全流程详解

一、需求分类:从宏观到微观的三层拆解

1. 业务需求(Business Requirement)

  • 本质 :企业或客户的顶层目标 ,回答 "为什么要做这个系统"。
  • 来源:通常来自企业高管、产品负责人或客户方的业务决策者。
  • 例子:"实现用户留存率提升 20%""通过线上化流程降低 30% 的人力成本"。
  • 作用:定义项目的价值和方向,是所有后续工作的根本出发点。

2. 用户需求(User Requirement)

  • 本质 :终端用户的具体目标和任务 ,回答 "用户想用系统做什么"。
  • 来源:直接和系统打交道的各类角色(如普通用户、管理员、客服等)。
  • 例子:"用户可以一键生成订单报表""客服能在 30 秒内查询到用户历史工单"。
  • 作用:把抽象的业务目标转化为用户可感知的具体任务,是需求分析的核心依据。

3. 系统需求(System Requirement)

  • 本质 :从系统角度定义的技术实现要求 ,回答 "系统需要具备哪些能力"。
  • 构成
    • 功能需求:系统必须实现的具体功能,如 "支持手机号 + 验证码登录"。
    • 非功能需求:对系统质量的要求,如 "页面加载时间不超过 2 秒""系统可用率达到 99.9%"。
    • 设计约束:开发和交付时的限制条件,如 "必须使用国产数据库""兼容 Windows 10 及以上系统"。
  • 作用:是开发团队进行设计和编码的直接依据,确保最终系统能满足业务和用户的期望。

二、需求获取:如何精准拿到用户的真实想法

1. 用户访谈

  • 方式:一对一或小组访谈,是最直接、最深入的需求收集方式。
  • 技巧:多用开放式问题(如 "你平时处理这个业务时最大的痛点是什么?"),少用封闭式问题(如 "你需要这个功能吗?")。
  • 适用场景:用户数量少、业务逻辑复杂的场景。

2. 问卷调查

  • 方式:设计结构化问卷,让大量用户快速反馈。
  • 技巧:问题要简洁明确,避免引导性表述;先通过问卷筛选出核心问题,再针对重点用户进行访谈。
  • 适用场景:用户基数大、需要快速收集普遍需求的场景。

3. 采样

  • 方式:从现有文档(如业务流程手册、历史工单、用户反馈记录)中提取关键信息。
  • 技巧:重点关注高频问题、投诉记录和核心业务流程,这些往往是需求的 "金矿"。
  • 适用场景:已有一定业务积累,希望从历史数据中挖掘需求的场景。

4. 情节串联板(Storyboard)

  • 方式:用图片、幻灯片或原型演示系统的完整操作流程,让用户直观感受系统如何运行。
  • 技巧:模拟真实的用户场景,比如 "用户从注册到下单的完整流程",让用户能提前 "体验" 系统。
  • 适用场景:需要向用户或非技术人员解释复杂交互逻辑的场景。

三、需求分析:把零散信息变成可执行的蓝图

需求获取到的信息是零散的、甚至可能相互矛盾的,需求分析的工作就是 "去伪存真、梳理逻辑、形成规范",最终产出《软件需求规格说明书》。

1. 绘制系统上下文范围关系图

  • 目的 :明确系统的边界和接口,搞清楚 "系统和哪些外部实体(用户、其他系统、硬件)交互" 以及 "交互的方式是什么"。
  • 作用:避免后续开发中出现 "范围蔓延",确保所有人对系统的边界有统一认知。

2. 创建用户界面原型

  • 目的:用可视化的方式让用户提前看到系统的样子,验证需求的合理性。
  • 形式:可以是高保真的交互原型(如 Axure 制作),也可以是手绘的低保真草图。
  • 作用:减少 "用户说的" 和 "开发做的" 之间的偏差,是需求确认的有效工具。

3. 分析需求的可行性

  • 目的 :评估需求在技术、成本、时间上是否可行,以及是否和其他需求存在冲突。
  • 例子:用户要求 "实现实时语音翻译",需要评估现有技术能否支撑、开发成本是否在预算内。
  • 作用:提前识别风险,避免在后续阶段才发现需求无法实现。

4. 确定需求的优先级

  • 目的:在资源有限的情况下,确保最核心的需求被优先实现。
  • 方法:常用 "满意度 - 不满意度" 模型,或 MoSCoW 优先级划分(Must have/Should have/Could have/Won't have)。
  • 作用:为项目迭代计划提供依据,确保每次迭代都能交付最有价值的功能。

5. 为需求建立模型

  • 目的 :用图形化的方式(如用例图、数据流图、实体关系图)描述系统的数据、功能和行为,让需求更清晰、无歧义。
  • 作用:为后续的概要设计和详细设计提供可视化的系统视图,是技术团队理解需求的桥梁。

6. 创建数据字典

  • 目的 :统一定义系统中所有数据项和数据结构,比如 "用户 ID 是长度为 16 的字符串""订单状态包括待支付 / 已支付 / 已取消"。
  • 作用:确保开发、测试、运维等所有角色对数据的定义和格式有统一认知,避免因数据不一致导致的问题。

六、面向对象分析(OOA)全流程详解

一、统一建模语言 UML

UML 是面向对象分析与设计的 "世界语",它用标准化的图形符号来描述系统,让不同角色的人都能看懂。

1. 三大核心组成

  • 事物(建模元素):构成模型的基本积木,包括结构事物(类、接口)、行为事物(用例、活动)、分组事物(包)和注释事物(注解)。
  • 关系:把不同事物连接起来的纽带,是理解系统结构的关键。
  • :将事物和关系组合成的可视化视图 ,常用的有:
    • 用例图 :描述系统能提供的服务(从用户视角)。
    • 类图 :描述系统的静态结构(类、属性、方法、关系)。
    • 顺序图 :描述对象间的动态交互流程
    • 活动图 :描述业务流程或算法步骤

二、用例模型:从用户视角定义系统功能

用例模型是需求分析和 OOA 之间的桥梁,它的核心是 "站在用户角度看系统能做什么"。

1. 用例图的三元素

参与者(Actor)系统外部与系统交互的任何事物,可以是用户、其他系统、硬件设备。

  • 例如:论坛系统的参与者是 "普通用户" 和 "管理员"。

用例(Use Case)系统提供的一个完整功能,是参与者与系统的一次对话。

  • 例如:"发布帖子""登录系统""管理版块"。
  • 通信关联:参与者和用例之间的连接,代表参与者会触发或使用该用例。

2. 构建用例模型的步骤

1.识别参与者:通过提问 "谁使用 / 安装 / 维护 / 关闭系统?哪些系统与它交互?" 来找出所有外部角色。

我们以当前准备开发的论坛系统为例,前期获取到如下用户需求:

  • 注册登录
  • 帖子列表,发布帖子,删除帖子,回复帖子等功能.
  • 支持个人主页的展示 / 编辑,支持头像上传.
  • 支持帖子按版块分类.
  • 支持发布图片表情
  • 支持站内私信
  • 管理员可以添加 / 删除 / 修改版块
  • 管理员可以管理所有帖子

综合以上需求描述,可以明显的提到两个参与者,一个是管理员,一个是普通用户

2.合并需求获得用例:将零散的用户需求分配给对应的参与者,再合并同类需求,提炼出具体用例
  • 比如 "发布帖子、修改帖子、删除帖子" 这几个操作,都属于对帖子的操作,就合并成了 "增加删除修改帖子" 这个用例。
  • 再比如 "发送站内信、读取站内信" 合并成了 "发送 \ 读取站内信" 用例。

用例合并判断清单

  • 用户目标是否一致?

    • 要合并的几个功能,是否都服务于同一个用户目标?
    • 例如:"发布、修改、删除帖子" 的目标都是 "管理自己的帖子",可以合并;而 "查看帖子" 的目标是 "浏览信息",目标不同,不能合并。
  • 行为类型是否相同?

    • 是 "读操作"(如查看、搜索)还是 "写操作"(如新增、修改、删除)?
    • 读、写操作的业务逻辑和权限通常不同,建议分开。
  • 权限和前置条件是否相似?

    • 要合并的功能,是否需要相同的前置条件(如 "用户必须登录")和权限?
    • 如果一个功能游客就能用,另一个功能需要管理员权限,就不能合并。
  • 事件流是否可以自然衔接?

    • 合并后的用例,其事件流是否是一个连贯的过程?
    • 如果几个功能是独立的操作,没有先后依赖关系,强行合并会让用例描述变得混乱。
  • 未来扩展是否独立?

    • 考虑未来迭代时,这些功能是否会独立变化?
    • 如果一个功能可能单独被修改或删除,那它就应该是一个独立的用例。
3.细化用例描述:为每个用例编写详细文档,包括:

用例描述可以迭代完成,先对⼀些重要的⽤例编制相对细致的描述 ,对于那些不重要的⽤例可 以留待以后再补充完成,⽤例描述 通常包括**⽤例名称、简要说明、事件流、⾮功能需求、前置和后 置条件、扩展点、优先级。**

用户发帖、删帖等操作都需要先验证身份,为了避免重复 ,我们把 "身份检查" 抽成一个独立用例 。在 UML 用例图中,用 include 关系表示 "发布帖子" 等主用例必须执行 "身份检查" 这个被包含用例,以此实现功能复用,让用例模型更简洁易维护。

1. 核心含义

include 表示 "必须执行 " 的依赖关系

  • 箭头指向的 "身份检查" 是一个被复用的基础用例。
  • 箭头起点的 "发布帖子" 是主用例。
  • 这意味着:只要执行 "发布帖子",就一定会先执行 "身份检查"

2. 为什么要这么设计
  • 功能复用:"身份检查" 是多个操作(如发布帖子、删除帖子、发送私信)都需要的前置步骤,把它抽成独立用例,避免了代码和描述的重复。
  • 职责单一:让每个用例只关注自己的核心业务,"发布帖子" 专注于发帖逻辑,"身份检查" 专注于验证逻辑,符合 "单一职责" 原则。
  • 维护方便:如果以后身份验证的规则变了(比如增加短信验证),只需要修改 "身份检查" 这一个用例,所有依赖它的用例都会自动更新,不用逐个修改。
3.用例建模时,为什么先出不含公共用例(如身份检查)的业务用例图,后续才补充带 include 关系的细化图,最终到底该用哪一张?
1. 第一阶段图:业务用例总图
  • 作用 :用于和产品经理、客户等非技术角色沟通。它只展示用户能直接感知的核心业务功能,清晰划分了普通用户和管理员的权限范围,让大家对系统的整体能力有一个直观的顶层认知。
  • 价值:这是项目初期对齐需求、明确范围的关键交付物。
2. 第二阶段图:包含 include 关系的细化用例图
  • 作用 :用于开发和测试团队。它补充了技术细节 ,展示了 "身份检查" 这样的公共复用用例,以及它和其他业务用例的依赖关系,让技术团队能理解功能的底层逻辑和复用结构。
  • 价值:这是指导后续设计和编码的技术文档。

最终交付的是 "一套图"

在实际项目中,会把这两张图(甚至更多细化的用例图)整合进《需求规格说明书》里:

  • 对外沟通 :用第一张图,让所有人都能快速看懂系统能做什么
  • 对内开发 :用第二张图,让团队知道功能是如何协同工作的

简单来说,第一张图是 "给老板看的",第二张图是 "给工程师看的",二者缺一不可。

三、分析模型

1.定义概念类

1. 第一步:找到 "原材料"

提炼类的依据,就是需求文档、用例描述里的自然语言。比如我们看 "发布帖子" 的用例描述:

"用户在指定版块下,输入帖子标题和正文,发布一条新帖子。管理员可以删除违规的帖子。"

从这段描述里,我们把所有名词和名词短语都挑出来:

  • 名词:用户、版块、帖子、标题、正文、管理员

2.完整的工作流是这样的
  1. 收集所有原材料 :把整个项目的需求文档、所有用例描述(如登录、发帖、删帖、管理版块等)都读一遍,把所有名词和名词短语都列出来
  2. 集中分类处理 :把收集到的所有名词放在一起,统一进行 "显而易见的类、无意义的类、不确定类别的类" 的分类。
  3. 归并和提炼:最后把不确定的类归并到已有类中,得到最终的核心概念类。
3. 第二步:把名词分成三类

这是最关键的一步,我们把上面的候选名词分成三组:

4.处理 "不确定类别的类" 三步法
  1. 判断是属性还是独立类问自己:这个名词能不能脱离其他事物独立存在?

    • 不能独立存在 → 归为已有类的属性 例如:"帖子标题""帖子正文" 不能脱离 "帖子" 存在 → 归为 帖子 类的属性。"版块帖子数量" 不能脱离 "版块" 存在 → 归为 版块 类的属性。
    • 能独立存在 → 进入下一步判断。
  2. 判断是子类还是新类问自己:这个名词是不是已有类的一个特例?

    • 是特例 → 归为已有类的子类 (泛化关系)例如:"管理员" 是 "用户" 的一个特例 → 归为 用户 类的子类。
    • 不是特例 → 进入下一步判断。
  3. 判断是关联还是新类问自己:这个名词是不是描述两个已有类之间的关系?

    • 是关系描述 → 定义为两个类之间的关联关系例如:"用户 - 发布 - 帖子" 中的 "发布" 是关联关系,不是类。
    • 不是关系描述 → 升级为一个新的独立类例如:"私信" 不能归为 "用户" 或 "帖子" 的属性,是一个独立的新类。
2. 最终结果

通过这个过程,我们从零散的名词中提炼出了系统的核心概念类:用户、帖子、版块

2.确定类之间的关系

有了类之后,下一步就是搞清楚这些类之间是怎么 "互动" 的。UML 定义了六种核心关系,用不同的图形符号来表示:

关系类型 UML 符号 通俗解释 论坛系统例子
关联关系 实线 表示对象间的结构联系,通常用动词连接 用户 发布 帖子;帖子 属于版块。
依赖关系 虚线箭头 表示一个类的变化会影响另一个类,是一种 "使用" 关系。 "发帖页面" 依赖 "用户" 类来获取登录状态。
泛化关系 实线空心三角 表示继承关系,子类继承父类的属性和方法。 "管理员" 是 "用户" 的子类。
实现关系 虚线空心三角 表示类实现了接口的方法 "用户服务类" 实现了 "用户管理接口"。
聚合关系 实线空心菱形(整体端) 表示 "整体 - 部分 " 关系,部分可以属于多个整体,生命周期独立。 版块 聚合 多个帖子(帖子可以被移动到其他版块)。
组合关系 实线实心菱形(整体端) 表示 "整体 - 部 分" 关系,部分只能属于一个整体,生命周期与整体一致。 论坛 组合 多个版块(论坛删除,版块也随之删除)。

对于用户发布帖⼦的⽤例,在确定类与类之间关系之后,可以⽤UML的类图把这些关系记录下 来,如下图所⽰:用户发布帖⼦,帖⼦聚合成版块,版本组成了论坛

  • 先从名词提炼出类:从所有需求描述里找出名词,归并出核心的概念类(比如用户、帖子、版块)。
  • 再用动词定义关联关系:用描述类之间互动的动词(比如 "发布""包含""管理"),来定义这些类之间的关联、聚合等关系。

3.为类添加职责

1.在找到概念类并且理清了他们之间的关系后,就可为类添加职责,主要包括两⽅⾯内容:

  • 类所维护的知识(属性 / 成员变量) 这就是类的 "静态特征",用来描述这个类是什么
    • 比如 User 类的 usernamepassword 等,就是它维护的用户信息。
    • 注意:只定义和系统目标相关的属性,并且用简单数据类型(如 Stringint)。
  • 类能够执行的行为(方法 / 成员函数) 这就是类的 "动态行为",用来描述这个类能做什么
    • 方法通常从需求描述里的动词提炼而来,比如 User 类的 login()postArticle()
    • 同样,只保留主要的、和业务规则强相关的行为,不要过早陷入细节

2. 核心原则

  • 单一职责:一个类的属性和方法应该围绕一个核心业务目标,不要让它变成 "万能类"。
  • 高内聚、低耦合:类内部的属性和方法要紧密相关,而类之间的依赖要尽可能少。

根据分析得出的类的职责,⽤类图表⽰如下:

这⾥根据用户、帖⼦、版块的关系⽤类图做⼀个简单的⽰例,详细设计将在项⽬开发章节按 每个功能需求分别演⽰

4.建⽴交互图

多个对象的⾏为 通常采⽤交互图来表⽰,UML中最常⽤的是顺序图,⼏乎可以⽤在任何系统的场景。

顺序图的基本元素有对象、参与者、⽣命线、激活框、消息和消息线, 其中消息是顺序图的灵 魂。以用户登录过程为例,使⽤顺序图描述如下:

  • 参与者:用户(系统外部角色)
  • 对象:必须是系统内部、能干活的 "组件",而不是外部的 "用户"。登录页面、主页面、服务器、数据库(系统内部组件)
  • 生命线:垂直虚线,表示每个对象在流程中的存在周期
  • 消息:水平箭头,标有序号和内容,代表对象间的调用与数据传递(这是顺序图的灵魂)
箭头样式 名称 含义 示例场景
实线实心箭头 同步调用消息 发送方发出消息后,等待接收方执行完毕并返回结果,才继续自身流程。 登录页面 → 服务器:"发送用户名密码"
虚线实心箭头 返回消息 接收方完成处理后,将结果返回给发送方,是对同步调用的回应。 服务器 → 登录页面:"返回登录成功 / 失败"
实线开放箭头 异步调用消息 发送方发出消息后,不等待返回,立即继续自身流程。 订单系统 → 通知服务:"发送发货通知"
指向自身的实线箭头 自调用消息 对象内部调用自己的方法,执行内部逻辑。 服务器 → 服务器:"验证用户名密码"

通过顺序图可以清晰的描述系统中的⻆⾊和相应的操作流程

相关推荐
咕噜企业分发小米2 小时前
腾讯云和火山引擎在多云管理工具上如何实现成本优化?
java·腾讯云·火山引擎
不平衡的叉叉树2 小时前
从JDK 1.8到JDK 21:实用新特性
java
J_bean2 小时前
自定义 Spring 定时任务使用的线程池
spring·scheduled·定时任务线程池
鱼跃鹰飞2 小时前
Leetcode1027:最长等差数列
java·数据结构·算法
2301_797312262 小时前
学习Java42天
java·开发语言·学习
chilavert3182 小时前
技术演进中的开发沉思-325 JVM:java体系技术全貌(下)
java·开发语言·jvm
chilavert3182 小时前
技术演进中的开发沉思-324 JVM:java技术体系全貌(上)
java·开发语言
pcm1235672 小时前
通信服务前沿知识
java
晓13133 小时前
第二章:Redis常见命令与Java客户端
java·数据库·redis