2025年3月22日作 

题目

基于架构的软件设计(Architecture-Based Software Design, ABSD)方法以构成软件架构的商业、质量和功能需求等要素来驱动整个软件开发过程。ABSD是一个自顶向下,递归细化的软件开发方法,它以软件系统功能的分解为基础,通过选择架构风格实现质量和商业需求,并强调在架构设计过程中使用软件架构模板。采用ABSD方法,设计活动可以从项目总体功能框架明确后就开始,因此该方法特别适用于开发一些不能预先决定所有需求的软件系统,如软件产品线系统或长生命周期系统等,也可为需求不能在短时间内明确的软件项目提供指导。
请围绕“基于架构的软件开发方法及应用”论题,依次从以下三个方面进行论述。

① 概要叙述你参与开发的、采用ABSD方法的软件项目以及你在其中所承担的主要工作。
② 结合项目实际,详细说明采用ABSD方法进行软件开发时,需要经历哪些开发阶段?每个阶段包括哪些主要活动?
③ 阐述你在软件开发的过程中都遇到了哪些实际问题及解决方法。

摘要

    我司自主研发的某省预约挂号系统以后简称预约挂号系统,该系统集众多功能与一体,旨为提高医疗服务质量和患者体验。随着用户量的逐年增加系统面临的性能瓶颈和可用性的严峻挑战,严重阻碍了系统服务质量进一步提升。我担任公司的系统架构设计师,主要工作是对系统架构的整体设计。面对系统的两大问题,我们采用了基于架构的软件设计方法,其有架构驱动设计、递归细化的特点,让我门在面对预约挂号的整体业务时有了切入点,我们又通过体系结构的需求、设计、文档化、复审、实现和演化的阶段,完美完成了系统的升级工作,为后期的千万级的用户量奠定基础,更是顶住了名医抢号功能的高并发访问,轻松应对万级的用户请求,得到了领导和组员的高度认可。

背景

    随着信息化时代的到来,各大医院纷纷拥抱线上系统。我司顺应时代的潮流自主研发了一套功能全面的预约挂号系统,系统集预约挂号、体检预约、报告查询和名医抢号等核心功能于一体,旨为提高医疗服务质量和患者体验。但随着用户基数的逐年增长,系统面临着性能瓶颈和可用性的挑战,严重阻碍了系统服务质量的进一步提高。为了保证系统能够持续稳定的运行,我司于2023年3月毅然决定对系统进行全面升级和新功能的开发工作,计划一年时间,投资800万,我担任系统架构设计师,主要工作涵盖了系统架构的整体设计、技术栈精准选型和每个核心阶段的评审工作。根据系统需求和讨论,我们选择了基于架构的软件设计方法,通过对业务的分析细化,得出构件组装成系统架构。根据架构驱动设计,通过了体系结构的需求、设计、文档化、复审、实现和演化等阶段,经过一年的不懈努力,成功如期圆满完成,我们挺住了千万级的用户量,并在名医抢号功能的高并发环节,轻松应对万级的请求量,项目组成员和领导给予了高度认可。

理论

    由于预约挂号系统涉及业务量巨大,各个系统的技术含量和价值又高低不同,比较难以划分,而基于架构的软件开发方法正好有通过架构来驱动系统的设计,完美的指导了预约挂号系统的设计,接下来我描述一下基于架构的软件设计方法主要经历的阶段,以及每个阶段的具体活动。
    基于架构的软件设计方法是一个架构驱动设计、用例标识系统的功能需求、视图视角标识系统的架构、质量场景标识质量需求。还有指导自顶向下递归细化的特点。该方法需要经历六个阶段:
    一、体系结构需求阶段。1.需要从需求库或用户等处获取需求,使用用例图表示。2.根据用例图生成类图,然后对类进行分组,最后把类打包成构件。3.邀请项目组成员对构件评审。
    二、体系结构设计阶段。1.提出复合系统的架构模型。2.获取构件。3.设计构件间的相互作用。4.分析出体系结构模型。5.阶段评审。
    三、体系结构文档化。1.根据整理出来的设计材料,编写体系结构规格说明书、测试体系结构的说明书。
    四、体系结构复审。1.组织项目干系人、外部的用户和领域人员等,对系统的设计进行全面的评审,主要任务是分析出系统的风险因素和设计的缺陷,阶段迭代进行。2.得到最终的体系结构设计文档。
    五、体系结构实现。1.根据体系结构设计文档选择构件。2.按照构件的关系图,组装部署构件成系统。3.对系统进行测试。4.发现问题,然后阶段迭代,直至完成最终系统。
    六、体系结构演化。1.收集变更需求,并分类。2.编写变更计划。3.增删改构件,并更新体系结构的关联关系。4.对系统测试。5.演化后的体系结构。

实践

    预约挂号系统基于架构的软件设计方法实施有六个阶段,其中遇到的问题以及解决方法如下:
    一、体系结构需求阶段。1.首先我从需求库中整理了老系统的需求,又进行问卷调查、与领导探讨整理了预约挂号的需求,发现业务需求都融合在一起,杂乱无章。我通过分析把业务类总体分成医院、患者、订单、支付和三方对接服务,得到了用例图。2.我根据用例图:a.把医院、科室和医生归类为机构类;b.患者和用户归类为用户类;c.预约挂号、体检预约和抢号产生的订单信息等归类为订单类;d.患者的所有支付操作归类为支付类;e.与三方医院的对接归类为三方服务类;f.最后把类打包成构件,即机构服务、用户服务、订单服务、支付服务和三方服务等。3.组织项目干系人、领域专家和领导进行评审,发现在各类中有很多公共类,比如机构服务中查询地区编号,用户、订单等服务中也会查询,没有必要编写多套,经过讨论在原来的类别中增加公共服务构件,用来处理所有应用的公共操作部分。
    二、体系结构设计阶段。1.我根据需求分析得到的用例图和获得的构件进行分析,提出了独立构件和调用返回等架构风格。2.我组织了一场通过质量场景的架构评估方法,经过对构件和系统质量需求的分析发现:a.预约挂号系统的构件众多,相互调用没有明确的操作顺序很容易产生循环调用的风险,为了系统的可用性,我决定牺牲部分性能,对现有构件进行下沉设计形成基础构件,上层增加聚合器服务用来聚合处理基础构件提供的数据,而基础构件之间隔离。b.而在性能方面为面对即将突破千万的用户量,我决定应用层采用负载均衡、多副本部署构件。数据层采用分布式代理、分布式部署和缓存的策略来部署构件。3.经过多轮的评审讨论,我们决定采用层次式架构风格,并使用分布式、微服务部署策略。
    三、体系结构文档化。1.根据具体的架构风格,我通过活动图、序列图和通信图描述系统的行为。通过状态图描述对象的生命周期内状态间转换的条件和事件,例如:患者产生的订单从预约到就诊的一系列状态转换。最后形成体系结构规格说明书,指导实现阶段工作。2.我与测试人员共同编写了测试体系结构的说明书,方便后续的测试工作。
    四、体系结构复审。1.我邀请了外部医院、用户和领域人员等代表,还有项目组内干系人,一起评审了体系结构的设计文档。经过讨论感觉预约挂号系统的可用性还未达标,我又提出了同城主备、异地主备的两种方案,经讨论异地主备两地系统通信实现成本较高,决定采用同城主备的方案。2.经过多轮评审和文档改造,得到了最终的体系结构规格说明书和测试体系结构说明书等文档。
    五、体系结构实现和演化。1.根据最终的设计文档,我们从构件库中获取到了支付服务、三方服务和公共服务等构件,还有机构服务、订单服务、用户服务构件没有,需要新开发,不过可以通过机会复用从老系统中拆分代码到构件中。2.根据体系结构规格说明书部署获得的构件。3.根据测试体系结构说明书,按步骤测试预约挂号系统。4.预约挂号系统上线运行和运维。5.最后进入演化阶段,收集用户评价、变更的需求、对需求进行优先级排序和分类,根据变更增删改构件,更新设计文档,测试上线,得到演化后的体系结构。

结尾 

    预约挂号系统使用了基于体系结构的软件设计方法效果不错,经过一年的不懈努力最终成功实施,2024年3月初正式上线,经过一个月的精心推广,又吸引了大批的用户,现已突破千万大关,系统平稳运行,特别是应对名医抢号功能的并发处理能力,轻松应对万级的用户请求,显著提升了系统的性能和可用性,赢得了项目组成员和领导的高度认可。然而在开发初期,有项目组成员对开发模型的理解模糊不清,一度阻碍了项目进度的推进,针对这一问题我们迅速行动,通过项目组间人员的灵活调配,完美解决了这一短板。接下来我们准备迁移老数据库的数据到新库,经过此次实施,我们对迁移方案充满信息,将以更高的要求和标准完成任务。对于我而言,此次架构的设计是一个不可多得的机会,我的技术和经验得到了显著的提升。

 

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker基础】Docker容器管理:docker exec详解

目录 1 docker exec命令概述 1.1 命令定位与作用 1.2 与相似命令对比 2 基本语法与参数解析 2.1 完整命令语法 2.2 核心参数详解 2.2.1 -i, --interactive 2.2.2 -t, --tty 2.2.3 -d, --detach 2.2.4 -e, --env 2.2.5 -u, --user 2.2.6 -w, --workdir 3 典型使用场…

CSS3实现同心圆效果

效果图&#xff1a; 文本左侧显示一个 外圆&#xff08;30px&#xff0c;半透明&#xff09; 和 内圆&#xff08;12px&#xff0c;实色&#xff09; 的同心圆&#xff1a; <!DOCTYPE html> <html> <head><style>.text-with-circles {position: rela…

Spring Boot项目开发实战销售管理系统——系统设计!

Spring Boot项目开发实战——销售管理系统 在前面的章节中我们详细介绍了Spring Boot各个功能的使用&#xff0c;本章将新建一个销售管理系统项目&#xff0c;演示项目从需求分析到功能分解&#xff0c;再到各个功能的实现过程&#xff0c;最后再使用Docker部署上线的完整过程…

RK3588开发笔记-Hailo AI模块调试

目录 前言 一、RK3588 与 Hailo AI 模块简介 RK3588 Hailo AI 模块 二、原理图连接 三、内核配置 四、Hailo驱动编译 五、Hailo模块验证 总结 前言 在边缘计算和人工智能应用不断发展的今天,将高性能的 AI 模块与功能强大的开发板相结合,能为各种创新应用提供坚实的基…

【Pytorch】语言模型上的动态量化

目录 ■导言 ①定义模型 ②加载文本数据 ③加载预训练模型 ④测试动态量化 ■结论 ■导言 量化涉及将模型的权重和激活从float转换为int&#xff0c;这可以导致更小的模型大小和更快的推理&#xff0c;并且只对准确性造成很小的影响。 本文将把最简单的量化形式-动态量…

【有啥问啥】大模型效率部署之Prefill-Decode分离

大模型效率部署之Prefill-Decode分离 Prefill 与 Decode 阶段定义与流程 LLM 推理分为两个阶段&#xff1a;预填充&#xff08;Prefill&#xff09;和解码&#xff08;Decode&#xff09;。在 Prefill 阶段&#xff0c;模型将完整地处理用户输入的所有提示词&#xff08;prom…

QT Creator构建失败:-1: error: Unknown module(s) in QT: serialport

Qt Creator和Qt SDK版本&#xff1a; Product: Qt Creator 17.0.0 Based on: Qt 6.9.1 (MSVC 2022, x86_64) Built on: Jun 17 2025 16:32:24 From revision: 4983f08c47 问题&#xff1a; 在使用串口的时候&#xff0c;在pro 文件中添加了 QT serialport&#xff…

基于PostgreSQL的百度或高德等POI多层级分类的数据库设计

目录 前言 一、百度 VS 高德 POI分类 1、高德POI分类 2、百度POI分类 3、分类对比与区别 二、POI分类表设计 1、物理表结构 2、数据存储 3、数据查询 三、总结 前言 在当今数字化快速发展的时代&#xff0c;地理信息数据的重要性日益凸显&#xff0c;而POI&#xff08…

AutoVLA:端到端自动驾驶中具有自适应推理和强化微调功能的视觉-语言-动作模型

26年6月来自UCLA的论文“AutoVLA: A Vision-Language-Action Model for End-to-End Autonomous Driving with Adaptive Reasoning and Reinforcement Fine-Tuning”。 视觉-语言-动作 (VLA) 模型的最新进展通过利用世界知识和推理能力为端到端自动驾驶带来了希望。然而&#x…

知攻善防靶机 Windows 近源OS

知攻善防靶机 [hvv训练]应急响应靶机训练-近源渗透OS-1 前景需要&#xff1a;小王从某安全大厂被优化掉后&#xff0c;来到了某私立小学当起了计算机老师。某一天上课的时候&#xff0c;发现鼠标在自己动弹&#xff0c;又发现除了某台电脑&#xff0c;其他电脑连不上网络。感觉…

「Java基本语法」求三位整数的各位数字之和

引言 现在来玩一个数字拆解游戏。想象一下手里拿着一个三位数的积木,现在需要把它拆成个位、十位和百位三块,然后把它们加起来。这个操作在实际编程中很常见,例如做密码校验、游戏分数计算等都可能会用到。 案例:求三位数各位之和 编写程序,从键盘输入一个三位的正整数…

SciChart 助力蛋白质结构研究:实时可视化推动生物科学新突破

SciChart是高性能数据可视化领域的优秀图表产品&#xff0c;深受数据密度和精度至关重要行业的信赖&#xff0c;包括航空航天、石油和天然气、科学研究和赛车运动等。作为F1中使用的解决方案&#xff0c;SciChart被NASA所依赖&#xff0c;并受到90%的顶级医疗技术公司青睐&…

基于Docker与cpolar的Leantime部署方案实现低成本跨地域团队协作

文章目录 前言1.关于Leantime2.本地部署Leantime3.Leantime简单实用4.安装内网穿透5.配置Leantime公网地址6. 配置固定公网地址 前言 各位小伙伴们&#xff0c;让我们暂时把目光从云端的分布式系统转向本地环境。在您的Linux主机上&#xff0c;我们将搭建一个高性价比的协作平…

阿里云Redhat系Linux修改ssh默认端口

阿里云Redhat系Linux修改ssh默认端口 在阿里云买了个服务器&#xff0c;想着ssh的默认端口是22&#xff0c;这不安全。 我就将修改ssh默认端口的过程记录下来了&#xff0c;方便日后回看。 本命令适用于 Redhat系Linux&#xff0c;例如 Redhat、Centos、Alibaba Cloud Linux、…

lib61850 代码结构与系统架构深度分析

一、整体代码结构概述 lib61850 采用模块化设计&#xff0c;核心代码位于src目录下&#xff0c;主要包含以下子目录&#xff1a; src/ ├── hal/ # 硬件抽象层 ├── mms/ # MMS协议实现 ├── goose/ # GOOSE协议实现 ├──…

linux程序保活

需要解决的一个情况&#xff0c;在一些比较老的linux系统里&#xff0c;没有systemctl来进行程序的启动和重启。现在需要设计一个让程序高可用的方案。尽量提高程序可用性。 方案分成几步&#xff0c;属于补充和递进的关系。最简单的是用systemctl 托管&#xff0c;或者service…

文件加密、隐藏软件 GiliSoft File Lock Pro v15.0 打造自己的私密空间

“在这个连聊天记录都可能被截图的时代&#xff0c;你的电脑硬盘里藏着多少不敢示人的秘密&#xff1f;”上周同事借我电脑改PPT时&#xff0c;我突然想起D盘里存着的年度述职报告草稿——那里面密密麻麻标注着部门每个人的绩效短板&#xff0c;要是被误看到简直社死现场。好在…

深入浅出Java NIO:原理、实战与性能优化

深入浅出Java NIO&#xff1a;原理、实战与性能优化 一、技术背景与应用场景 随着高并发、低延迟场景愈发常见&#xff0c;传统的基于阻塞 I/O&#xff08;BIO&#xff09;模型难以满足海量连接的需求。Java NIO&#xff08;Non-blocking I/O&#xff09;通过 Selector、Chan…

道可云人工智能每日资讯|中国航空工业集团召开人工智能大会

道可云人工智能&元宇宙每日简报&#xff08;2025年6月25日&#xff09;讯&#xff0c;今日人工智能&元宇宙新鲜事有&#xff1a; 第22届中国—东盟商务与投资峰会聚焦人工智能热点 第22届中国—东盟商务与投资峰会(以下简称峰会)联络官会议24日在广西南宁召开。中国贸…

Python实例题:文件内容搜索工具

目录 Python实例题 题目 要求&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; Python实例题 题目 文件内容搜索工具 要求&#xff1a; 实现一个命令行工具&#xff0c;用于在指定目录下搜索包含特定文本的文件。支持以下功能&#xff1a; 递归搜索子目录区分…