UML设计系列(9):开发过程中如何应用UML

news2025/4/25 14:03:23

 传送门

UML设计系列(1):状态机图

UML设计系列(2):类图

UML设计系列(3):时序图

UML设计系列(4):用例图

UML设计系列(5):系统依赖图

UML设计系列(6):活动图

UML设计系列(7):UML设计阶段性总结

UML设计系列(8):数据库关联关系图

我眼中的软件开发流程

对于软件的开发流程,我们一直没怎么触碰,探讨不多。业界的标准开发模式也很成熟,比如你可能听过传统的瀑布、迭代开发模式,随着微服务风靡的敏捷开发模式,以及时下比较为的DevOps等。

这些名词程序员或多或少都听过,甚至项目上都应用过,不过标准的开发模式其实分为4种:瀑布模型、迭代式开发、螺旋开发、敏捷开发,其中螺旋开发可能接触的比较少,而敏捷又比较繁杂。由于今天不是讨论的重点,可自行参考相关资料。

但是从我个人经验来说,不管是哪种开发模式,我觉得在开发过程中应用UML设计都是很有必要的,这里可以提供一些个人的经历供参考。

常用的软件开发流程

早期阶段

在刚工作的那些年,我是在杭州的软件公司做开发,主要是为一些金融机构做系统,既有驻场开发、也有公司saas化的产品。这类项目有一个共通点:属于偏"交付"性质项目,所以对需求管理比较严格(尤其是银行类钱多又强势的甲方),但是对代码设计几乎是没有的。而且这类项目一般有一个权力比较大的项目经理,不仅把控项目进度,还拥有考核权,属于项目经理矩阵的强势一方。他的主要任务是保证系统交付不延期,所以通常都鼓励加班来达成目标。在这种情况下,当时不要说利用UML做系统分析设计,甚至可以说设计也几乎没有,每天几乎就是按照需求不停的写代码,然后产品经理修改需求再改代码,偏向于传统的瀑布模式!

不过当时没有什么经验,加上技术也不熟练觉得可以锻炼技术,这样情况下倒对此也没有多想,顺便收获了一波经验。现在回想起来,如果当年能有这样一个机制要求做好系统设计+评审(或者有这样一个资深的程序员来整体负责),或许当年加的班会不会少一些(至少不会每个资金指令都要重新撸一遍代码)

中期阶段

事情突然有了改变,当从杭州离开回到成都,进入了一家互联网企业(公司总部竟然还是在杭州),UML于我而言,突然变成了不可或缺!这里的开发流程不再是需求来了,埋头苦干就行了,必须要做称为"系分"的设计:

  1. 不论是项目规模大小,功能简单或复杂都要求写一个系分文档设计
  2. 要求本系统内尽可能详细,关联系统尽可能全,从全局视角梳理涉及的功能点
  3. 参与开发人员都要参与,最终汇总评审

在第2点中,编写设计文档的过程中,主要会使用到UML相关的以下几点:

  • 使用ER图表示数据库的关联关系
  • 使用类图表示对象之间的关联关系;以及模块化的包图
  • 使用状态机表示单个对象的生命周期,或某一个操作的业务状态流转
  • 使用时序图表示某一个操作的整体流程
  • 使用活动图表示某一个操作的详细流程
  • 使用依赖图表示系统/组件之间的依赖关系

除此以外,还有从用户角度的用例图来表示系统的功能点与角色的关系,还有系统运维角度的部署图(这里就不贴链接了,现在它还躺在我的草稿箱里面),以及项目管理角度的功能点大图(一般是xmind编写)。

这个过程从入职那一天开始,一直持续到离职。不夸张的说花在UML设计这上面的时间不会比写代码时候少,对于UML的熟悉程度也算比较熟悉了。刚开始肯定是有个适应的过程,工具不熟悉、流程不熟悉,可能画一个流程图所费的时间可能代码都写完了,甚至会在某个时刻感到痛苦。后来类似于自我心里调节,公司相当于发钱让自己学习了,这样还整体学习了一下UML知识体系,收获颇多!其中看过的几本书列举在后面附录了。

现阶段

有一种说法叫"近朱者赤"。虽然离开了老东家,但是对于"系分"和UML设计,还是形成了潜移默化的影响。现在的公司虽然也有自己的研发流程和各种要求,但还是和早期阶段一样,对于系统设计要求并不高。所以难就难在没有外部要求下,如何坚持下去这种研发高标准!好在公司还算有点自由,在后面几年中我始终都沿续了这种步骤,写代码之前做需求、设计分析, 并有幸影响了周围的同事都开始了这种习惯(当有个同事第一次看到这种文档时,直感叹"专业"二字!!!)

假装是一个附录-UML书籍列表

前后七七八八看过几本UML的书,也都是粗略翻翻:

  • UML精粹第三版https://baike.baidu.com/item/UML%E7%B2%BE%E7%B2%B9%EF%BC%9A%E6%A0%87%E5%87%86%E5%AF%B9%E8%B1%A1%E5%BB%BA%E6%A8%A1%E8%AF%AD%E8%A8%80%E7%AE%80%E6%98%8E%E6%8C%87%E5%8D%97%EF%BC%88%E7%AC%AC3%E7%89%88%EF%BC%89/62687193这本书厚,可以做为很好的入门。但是它是大名鼎鼎的Martin Fowler写的,这就值得入手一观了
  • [大象-Thinking.in.UML(第二版)].谭云杰https://baike.baidu.com/item/%E5%A4%A7%E8%B1%A1%EF%BC%9AThinking%20in%20UML%EF%BC%88%E7%AC%AC2%E7%89%88%EF%BC%89/12067378这是一本国人写的优秀的UML书籍,里面除了介绍UML之外,还有系统设计方法与思路。不过比较"大部头",有啰嗦之嫌,说实话我没有看完,建议有兴趣的看看
  • UML用户指南(第2版)https://baike.baidu.com/item/UML%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97%EF%BC%88%E7%AC%AC2%E7%89%88%C2%B7%E4%BF%AE%E8%AE%A2%E7%89%88%EF%BC%89/62641927这本同UML精粹大同小异,可以互为补充,如果看了前面2本,这本选读

看一个简单的案例

俗话说,"纸上得来终觉浅,绝知此事要躬行"。下面就以一个例子来看看,在一个开发过程中到底如何使用UML。在最开始介绍状态机的时候举了一个用户登录的例子,现在就以继续以这个场景为背景,来看看开发的视角该做哪些工作。

用时序图体现整体流程

可以用时序图表现出整体的登录流程,这里直接复用原来的那张图,不再重复画了:

时序虽然说是表现整体流程的,但是要画到什么程度,画多少个并没有具体的规定,可以按照项目大小、功能维度自行斟酌或团队约定。只要能真实的表达它对应的业务操作即可!

用状态机体现状态流转

这里的状态机也直接复用以前的,不过要说明的是这里状态节点比时序图中体现出来的操作更多,因为考虑了新用户注册及注销的情况。此处仅仅是做个示例就不再调整了:

用例图表现用户的操作

这里有2个角色:普通用户、管理员。理论上来说,注册时确认邮件的发送、账户的冻结可能都是自动化的(论证/风控系统识别出高危操作)不需要管理员这个角色手动操作,但这里为了突出用例图的作用,都设计出了对应的手动操作功能!

ER图体现数据库的关联关系

对于一般的业务来说,关系型数据库是必不可少的,这里这里就假设有几个表(RDS类型不限):t_user用户表、t_send_mail_history邮件发送表,现在用ER图来表示一下这2个表的信息

类图表示对象之间的关系

系统的设计最终效果还是要通过代码来体现,在UML设计的过程中与代码最息息相关也是最直接的就是类图。这里采用传统的SpringMVC结构来进行分层:

写在最后

没什么多说的,学习一项技术(工具)最好的时候就是当你开始使用的时候,找到一款合适的工具,从一个最简单的场景用UML设计起来吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2342471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模板方法模式:定义算法骨架的设计模式

模板方法模式:定义算法骨架的设计模式 一、模式核心:模板方法定义算法骨架,具体步骤延迟到子类实现 在软件开发中,经常会遇到这样的情况:某个算法的步骤是固定的,但具体步骤的实现可能因不同情况而有所不…

通付盾入选苏州市网络和数据安全免费体验目录,引领企业安全能力跃升

近日,苏州市网络安全主管部门正式发布《苏州市网络和数据安全免费体验产品和服务目录》,通付盾凭借其在数据安全、区块链、AI领域的创新实践和前沿技术实力,成功入选该目录。 作为苏州市网络安全技术支撑单位,通付盾将通过 “免费…

【金仓数据库征文】加速数字化转型:金仓数据库在金融与能源领域强势崛起

目录 一、引言 二、金仓数据库(KingbaseES)概述 1. 发展历程与市场地位 2. 核心技术架构 3. 金仓数据库的特点 三、金仓数据库在金融行业的应用 1. 金融行业的挑战与需求 2. 金仓数据库在金融行业的优势 3. 金仓数据库在金融行业的实际应用案例 …

C++智能指针上

一、裸指针 “裸指针”是最基础的,直接存储内存地址的指针类型。特点:①它本身没有自动的内存管理机制:如它不会自动释放内存,也不会检查是否指向有效的内存区域;②直接操作内存地址,不进行任何的边界检查&…

低代码平台开发串口调试助手

项目介绍 串口调试助手是一款用于串口通信调试的工具,它可以帮助开发人员发送和接收串口数据,主要用于嵌入式开发、工业控制、物联网设备开发等领域。 主要功能包括: 数据收发:可以实时发送和接收串口数据,并显示在界…

怎么配置一个kubectl客户端访问多个k8s集群

怎么配置一个kubectl客户端访问多个k8s集群 为什么有的客户端用token也访问不了k8s集群,因为有的是把~/.kube/config文件,改为了~/.kube/.config文件,文件设置成隐藏文件了。 按照kubectl的寻找配置的逻辑,kubectl找不到要访问集群…

12N60-ASEMI无人机专用功率器件12N60

编辑:LL 12N60-ASEMI无人机专用功率器件12N60 型号:12N60 品牌:ASEMI 封装:TO-220F 最大漏源电流:12A 漏源击穿电压:600V 批号:最新 RDS(ON)Max:0.68…

长城智驾重复造轮子

左手新能源,右手智驾,这是长城当下最在意的两块业务。 从去年8月首款具备高阶智能驾驶功能SUV全新蓝山上市之后,长城在传播端的重点就是围绕智驾、无图方案打造智驾标签。 先是在广州国际车展上,整个展厅只展出全新蓝山&#xf…

continue插件实现IDEA接入本地离线部署的deepseek等大模型

文章目录 前言一、IDEA安装continue二、continue部署本地大模型三、continue聊天窗口使用deepseek R1四、continue批量接入硅基流动的模型API 前言 亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加关注哦,您的关注是我…

滚珠螺杆在数控机床中如何降低摩擦系数?

对数控机床这样要求加工精度高而且加工精度能保持长期稳定的设备来说是必须的,而且具有较低的传动阻力也同时为更高速的传动打下基础。使用滚珠螺杆,也是数控机床加工效率高的一个重要原因,为了减少数控机床的滚珠螺杆出现摩擦,可…

【现代深度学习技术】循环神经网络05:循环神经网络的从零开始实现

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…

Python实现技能记录系统

Python实现技能记录系统 来自网络,有改进。 技能记录系统界面如下: 具有保存图片和显示功能——允许用户选择图片保存,选择历史记录时若有图片可预览图片。 这个程序的数据保存在数据库skills2.db中,此数据库由用Python 自带的…

Linux常见指令介绍下(入门级)

1. head head就和他的名字一样,是显示一个文件头部的内容(会自动排序),默认是打印前10行。 语法:head [参数] [文件] 选项: -n [x] 显示前x行。 2. tail tail 命令从指定点开始将文件写到标准输出.使用t…

VIC-3D非接触全场应变测量系统用于小尺寸测量之电子元器件篇—研索仪器DIC数字图像相关技术

在5G通信、新能源汽车电子、高密度集成电路快速迭代的今天,电子元件的尺寸及连接工艺已进入亚毫米级竞争阶段,这种小尺寸下的力学性能评估对测量方式的精度有更高的要求,但传统应变测量手段常因空间尺寸限制及分辨率不足难以捕捉真实形变场。…

下篇:深入剖析 BLE GATT / GAP / SMP 与应用层(约5000字)

引言 在 BLE 协议栈的最上层,GAP 定义设备角色与连接管理,GATT 构建服务与特征,SMP 负责安全保障,应用层则承载具体业务逻辑与 Profile。掌握这一层,可实现安全可靠的设备发现、配对、服务交互和定制化业务。本文将详解 GAP、GATT、SMP 三大模块,并通过示例、PlantUML 时…

27、Session有什么重⼤BUG?微软提出了什么⽅法加以解决?

Session的重大BUG 1、进程回收导致Session丢失 原理: IIS的进程回收机制会在系统繁忙、达到特定内存阈值等情况下,自动回收工作进程(w3wp.exe)。由于Session数据默认存储在进程内存中,进程回收时这些数据会被清除。 …

云智融合普惠大模型AI,政务服务重构数智化路径

2025年是“十四五”收官之年,数字政府和政务数智化作为“数字中国”建设的重点,已经取得了显著成效。根据《联合国电子政务调查报告2024》,我国电子政务发展指数全球排名第35位,与2022年相比提升8个名次;其中&#xff…

UE5 调整字体、界面大小

文章目录 方案一 5.4 版本及以上(推荐)方案二 5.3 版本及以下(推荐)方案三 使用插件(不推荐) 方案一 5.4 版本及以上(推荐) 进入 编辑 > 编辑器偏好设置,如下图所示&…

抽象类相关

抽象类的定义 抽象类 是一种特殊的类,它不能被实例化,只能作为基类来派生出具体类。抽象类至少包含一个纯虚函数 。纯虚函数是在函数原型前加上 0 的虚函数,表示该函数没有具体实现,必须由派生类来实现。 抽象类的作用 提供统…

【UVM项目实战】异步fifo—uvm项目结构以及uvm环境搭建

本文章同步到我的个人博客网站:ElemenX-King:【UVM项目实战】异步fifo—uvm项目结构以及uvm环境搭建 希望大家能使用此网站来进行浏览效果更佳!!! 目录 一、异步FIFO1.1 异步FIFO的定义1.2 亚稳态1.3 异步FIFO关键技术…