论特定领域软件架构

20250413-作 

题目

特定领域软件架构DSSA(Domain Specific Software Architecture)就是在一个特定应用领域中为一组应用提供组织结构参考的标准软件体系结构。对DSSA 研究的角度、关心的问题不同导致了对DSSA 的不同定义。DSSA 的必备特征如下。
    一个严格定义的问题域和问题解域。
    具有普遍性,使其可以用于领域中某个特定应用的开发。
    对整个领域的构件组织模型的恰当抽象。
    具备该领域固定的、典型的在开发过程中可重用元素。
请围绕“特定领域软件架构”论题,依次从以下三个方面进行论述。
1 概要叙述你所参与管理或开发的软件项目,以及你在其中所承担的主要工作。
2 说明DSSA 包括哪几个阶段的活动以及参与人员有哪些。
3 结合②详细说明你所参与的特定领域软件开发项目是如何进行架构设计的,给出每个阶段具体的实践过程。


 摘要

    某省预约挂号系统简称预约挂号系统,是我司自主研发的医疗产品,该系统集众多功能于一体,旨为提高医疗服务质量和患者体验,随着用户量的逐年攀升,系统面临着性能和可用性的挑战,严重阻碍了服务质量的进一步提升。我司决定于2023年3月对预约挂号系统进行全面升级工作,计划一年,投资800万,我担任系统架构设计师,主要工作就是系统架构的整体设计。因系统涉及领域较多,我们采用了DSSA的架构设计方法,通过定义领域范围、定义领域特定元素、定义领域特定设计和实现需求约束、定义领域模型和体系结构、产生搜集可重用的产品单元等5个阶段,完成了预约挂号系统升级工作,轻松应对了系统高并发时期要求的性能和可用性,得到了高层领导和组员的高度认可。

背景

    随着信息化时代的到来,各大医院纷纷拥抱线上系统,我司顺应时代潮流开发了一款集预约挂号、体检预约、报告查询和名医抢号等功能于一体的预约挂号系统,旨为提高医疗服务质量和患者体验,但随着用户量的逐年攀升,系统面临着性能瓶颈和可用性的严峻挑战,严重制约了服务质量的进一步提升,为了让预约挂号系统持续稳定的提供服务,我司毅然决定2023年3月对预约挂号系统进行全面升级工作,计划一年时间,投资800万,我担任系统架构设计师,主要工作涵盖了系统架构的整体设计、技术栈的精准选型和各个阶段的评审工作。考虑到预约挂号系统涉及业务领域众多,我们采用了DSSA的架构设计方法来指导系统的升级工作,我们经过定义领域范围、定义领域特定元素、定义领域特定设计和实现需求约束、定义领域模型和体系结构、产生搜集可重用的产品单元等5个阶段的循环迭代,成功对预约挂号系统的每个业务领域进行了设计和实施,完成了系统的全面升级工作。

理论

    DSSA总共包括了3个活动,每个活动中都有不同领域的人员参与,且对参与的领域人员的领域经验要求极高,下面介绍3个活动。
    1.领域分析阶段。该阶段主要是对系统的业务领域进行分析,目标是产生领域模型,参与人员有领域专家和领域分析师。找出系统中的用户需求、企业需求、可行性研究和业务目标等等领域的所有需求。然后整理这些需求,找出领域需求的共通点。再然后对需求分析,产生各个领域的模型,整理成需求规格说明书,指导后续的工作,同时也提供参考依据。
    2.领域设计阶段。该阶段主要是对提出的问题领域找出领域的解决方案,目标是生成领域架构,参与人员有领域架构设计师。领域专家和领域分析师可能需要参与指导。首先查看分析阶段提出的问题,整理归类。然后再提出解决方案,组织评审排除风险,生成领域的体系结构模型,另外,由于领域需求有变化性,所以产生的领域体系结构也要有变化性。整理成设计文档,为实现阶段提供参考和依据。
    3.领域实现阶段。该阶段主要是对领域的体系结构进行编码、测试和运行维护阶段,参与人员有领域实现人员。参考领域设计阶段产生的体系结构模型、设计模型和需求约束文档等材料。

实践

    预约挂号系统运行多年,已经产生了机构领域、消费者领域、统计领域和支付领域等众多的业务领域,所以我们采用了DSSA的设计方法,获得特定领域体系结构的阶段有五个,接下来我通过对机构领域的设计为例,描述这几个阶段。
    1.定义领域范围。首先由领域分析师分析,机构领域涉及的范围有医院、科室、医生等模块。a)医院承载科室和医生,医生与科室之间是多对多关系但是都属于一个医院。b)科室主要用来区分疾病。c)医生与发放号源、挂号和就诊等功能紧密结合。老系统中的医院、科室和医生的功能都比较有局限性,都是对接三方医院管理系统,此次升级涉及了模式的改造,改为由医院直接使用预约挂号系统录入医院、科室和医生的信息,所以需要具有代表性医院的领域专家参与设计。
    2.定义领域特定元素。在领域专家的参与和指导下,我们对机构领域有了新的认识,了解到:a)医生元素,医生坐诊分为普通号、专家号,号源与医生不强绑定关系,普通号可以是所有医生,专家号只对应一个医生。b)医院元素,首次从领域专家处听到了机构名词,众多医院可以使用机构代表,这也影响了我们后续对医院服务的称呼,我们改为了机构服务。c)科室元素,对疾病的分类,与医生之间是多对多的关系。领域分析人员与领域专家一起定义了机构领域词典,为后续的设计工作奠定了基础。
    3.定义领域特定设计和实现需求约束。我对机构领域中相关的信息有了初步的认识。首先,从领域分析人员处得到了需求规格说明书,以及分析的模型,我根据分析模型,设计了有医院、科室和医生等实体组成的领域类图。其次,结合老系统目前的运行状态材料,设计领域架构时我发现目前预约挂号系统,在检索医院、科室和医生的时候,有检索速度慢、无法查询附近的医院等问题,我提出了使用流行的NoSQL数据来代替关系型数据的存储以提高性能,但这会造成项目接入多个数据库,对数据的一致性和安全性有不小的影响。然后,我组织了讨论会,邀请了领域相关的专家、分析和设计人员参与了会议,决定使用ES(Elastic Search)中间件来存储机构相关的详细信息,在信息存储上服务直接与ES进行交互,采用异步增量的方式同步到关系型数据中作为后续大数据分析的离线数据,允许离线数据有一段时间的不一致。
    4.定义领域模型和体系结构。a)该阶段我细化了机构领域类图,并将类图打包成了包图来表示机构领域的体系结构。b)又通过活动图、顺序图描述了医生等实体的行为,c)通过通信图描述了医院、科室和医生等实例之间的交互关系。d)设计了部署图,来描述系统各个服务如何部署和部署的参数等等。
    5.产生搜集领域中可重用的产品元素。为了提高开发的效率,我又在老系统中通过系统复用整理了可重用的功能模块。首先,我把系统中所需要数据库构件、构件和代码等都描述进了复用文档中。其次,对于构件库中ES、Nacos等这些中间件,从安全性方面考量,检查漏洞和版本。然后,将有缺陷的组件更新成最稳定的版本。
通过设计阶段整理的文档,领域开发人员通过面相服务的开发方法,使用Spring、mybatis等工具开发了预约挂号系统的各个组件,通过单元、集成、系统和验收测试,完成了系统的开发。

结尾

得益于DSSA的使用,我们在2024年3月份顺利完成了预约挂号系统的开发并上线,又经过了一个月的精心推广,又吸引了大批的用户,目前用户量已经突破千万,又对接了11个地市的500多家医院,在支持名医抢号时表现突出,轻松应对万级的用户请求,极大的提高了系统性能和可用性,得到了项目组成员的赞誉和高层领导的高度认可。但在项目开发初期,有部分组员对DSSA的开发方法理解有误,一度阻碍了项目进度的按时推进,针对此问题我们快速反应,经过了项目组间人员的灵活调配,完美解决了这一短板,也给了我深刻的教训。下一步,我们准备对预约挂号系统的数据进行迁移工作,经过了此次项目的成功实施,我们对数据迁移工作充满信息,并将以更高的要求和标准对待迁移任务。此次DSSA方法的实施是个不可多得的机会,通过这次经历,我的知识和经验都得到了显著的提高。

总结经验:
1.分段可以,但不能处处分段。
2.分小标题可以,但不能处处小标题。要说明你有几步,否则使用:首先-其次-然后。
3.实践部分,要尽可能的拿 功能 举例子。

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

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

相关文章

iOS 远程调试与离线排查实战:构建非现场问题复现机制

iOS开发者都知道,调试最怕两个字:“偶发”。用户说App闪退了,你点了十遍也没问题;测试说功能卡顿了,你抓日志时它又顺滑如新。最麻烦的是,这种“现场问题”往往在你连接不到用户设备时发生。 面对这种情况…

SpringBoot -- 整合 Swagger3

8.SpringBoot3 整合 Swagger3 由于目前主流的开发模式是前后端分离开发。所以前后端的交互需要通过一个 API&#xff08;开发接口&#xff09; 来规范。而这个接口的开发是由后端程序员编写的。“网站式 API 文档” 1.导入依赖 <!-- 引入swagger3(springdoc)的依赖--> …

A Machine Learning Approach for Non-blind Image Deconvolution论文阅读

A Machine Learning Approach for Non-blind Image Deconvolution 1. 研究目标与实际意义2. 创新方法与模型设计2.1 核心思路2.2 正则化反演:理论与公式2.2.1 退化模型2.2.2 正则化目标函数2.2.3 傅里叶域闭式解2.3 MLP去伪影:架构与训练2.3.1 MLP架构设计2.3.2 训练流程2.3.…

微信小程序<rich-text>支持里面图片点击放大

使用<rich-text>渲染类似下面的html代码&#xff1a; <div stylecolor: red>宠物友好<br/>xxx提供宠物友好服务&#xff0c;具体请见下图<br/></div> <img srchttps://xxx.com/xxx1.png width100%/> <img srchttps://xxx.com/xxx2.png…

BVH 文件是一种用于记录 3D 动画数据的文件格式,常用于 3D 建模和动画制作。以下是对这个 BVH 文件的逐行解读

BVH 文件是一种用于记录 3D 动画数据的文件格式&#xff0c;常用于 3D 建模和动画制作。以下是对这个 BVH 文件的逐行解读&#xff1a; HIERARCHY ROOT Hips { OFFSET 0 0 0 CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation JOINT LeftUpLeg { OFFSE…

C语言开发:Onvif(一)

根据ONVIF官网 的介绍&#xff1a; ONVIF是一个开放的安防行业组织&#xff0c;致力于为安防行业提供和促进标准化开放接口&#xff0c;以实现IP网络安防产品和服务的有效互操作性。 在具体实现上&#xff0c;ONVIF使用了Web Service的方式&#xff0c;设备通过WSDL定义的接口…

中科米堆三维扫描仪耳机3D扫描尺寸测量数字化建模

当下&#xff0c;耳机已从单纯的音频输出设备进化为集娱乐、健康、办公于一体的智能穿戴终端。相关数据显示&#xff0c;2025年全球智能个人音频设备出货量突破4.55亿台&#xff0c;中国以22%的增速领跑全球&#xff0c;其中开放式耳机&#xff08;OWS&#xff09;出货量占比达…

学习接口自动化框架pytest有哪些好处?

学习 pytest 作为接口自动化测试框架&#xff0c;具有以下显著优势&#xff0c;能大幅提升测试效率和质量&#xff1a; Pytest自动化测试教程&#xff0c;自动化必备之Pytest测试框架训练营&#xff0c;只需一小时速成&#xff0c;学会直接上手实操&#xff01; 1. 代码简洁&…

LinuxBridge的作用与发展历程:从基础桥接到云原生网络基石

LinuxBridge作为Linux网络虚拟化的核心组件&#xff0c;已悄然支撑互联网基础设施20余年。它不仅是虚拟机网络连接的桥梁&#xff0c;更是容器网络、云原生架构的隐形支柱。 一、LinuxBridge的核心作用剖析 1. 二层网络虚拟化的实现者 本质功能&#xff1a;模拟物理交换机行为…

探讨 SYSCFG 时钟对 ADC 采样的影响

探讨 SYSCFG 时钟对 ADC 采样的影响 在嵌入式系统开发中&#xff0c;对于 GD32F4 系列微控制器&#xff0c;理解 SYSCFG 时钟与 ADC 采样之间的关系至关重要。 以下是详细分析&#xff1a; 一、SYSCFG 时钟对 ADC 采样过程的基础性作用 1. 提供采样时钟信号 ADC 采样需要时钟…

Spring Boot 项目实训 - 图书信息网站

文章目录 1. 实训目的2. 系统设计3. 运行演示4. 实现步骤4.1 创建数据库与表4.2 创建Spring Boot项目4.3 创建实体类4.4 创建映射器接口4.5 编写应用配置文件4.6 测试映射器接口4.7 创建服务类4.8 创建控制器4.9 准备静态资源4.10 创建模板页面4.11 测试整个项目 5. 实训总结 1…

GPU 性能可变性分析框架

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象。 分析来自 GPU 分析器的大规模性能日志通常需要数 TB 的内存和数小时的运行时间&#xff0c;即使是基本摘要也是如此。这些限制会阻止及时洞察&#xff0c;并阻碍将性能分析集成到自动化工作流程中…

Redis主从复制原理

一、Redis主从复制概述 Redis主从复制&#xff08;Master-Slave Replication&#xff09;是Redis实现高可用性和读写分离的基础架构。通过主从复制&#xff0c;数据可以从一个Redis服务器&#xff08;主节点&#xff09;复制到一个或多个Redis服务器&#xff08;从节点&#x…

将ONNX模型转换为(OPENMV可用的格式)TensorFlow Lite格式

将ONNX模型转换为TensorFlow Lite格式 在深度学习模型部署过程中&#xff0c;我们常常需要将模型从一种格式转换为另一种格式&#xff0c;以适应不同的硬件平台和应用场景。本文将详细介绍如何将ONNX格式的模型转换为TensorFlow Lite格式&#xff0c;以便在移动设备或嵌入式设…

EXILIUM×亚矩云手机:重构Web3虚拟生存法则,开启多端跨链元宇宙自由征途

在链游与元宇宙赛道竞争加剧的当下&#xff0c;EXILIUM凭借其去中心化开放世界、链上资产确权与玩家自治经济系统&#xff0c;成为Web3原住民逃离“中心化牢笼”的首选之地。然而&#xff0c;其多链交互门槛高、跨设备身份管理复杂、链上安全风险频发等问题&#xff0c;让普通玩…

用3个字符表示2字节二进制数据

把1字节二进制数据&#xff0c;用可打印字符表示&#xff0c;可用十六进制。这样一来&#xff0c;1字节变2字节&#xff0c;2倍。 2字节的二进制数据&#xff0c;可以用3个字符来表示&#xff0c;1.5倍。 2562略小于413&#xff0c;65536<68921 需要准备41个符号 包括&…

第 3 章:神经网络如何学习

第 3 章&#xff1a;神经网络如何学习 在第二章中&#xff0c;我们详细了解了神经网络的静态结构&#xff1a;由神经元组成的层&#xff0c;以及连接它们的权重和偏置。现在&#xff0c;我们将进入整个教程最核心的部分&#xff1a;神经网络是如何从数据中"学习"的&…

RocketMQ 消息长轮询

文章目录 问题所在&#xff1a;消费者如何高效地获取消息&#xff1f;解决方案&#xff1a;长轮询 (Long Polling - “等待与观察”模式)长轮询 vs. 短轮询&#xff08;可视化对比&#xff09;为什么这个机制对 RocketMQ 这么好&#xff1f;关键的配置参数 让我们用一个简单易懂…

TensorFlow Serving学习笔记3: 组件调用关系

一、整体架构 TensorFlow Serving 采用模块化设计&#xff0c;核心组件包括&#xff1a; Servables&#xff1a;可服务对象&#xff08;如模型、查找表&#xff09;Managers&#xff1a;管理 Servable 生命周期&#xff08;加载/卸载&#xff09;Loaders&#xff1a;负责 Ser…

视图、索引介绍

目录 1、视图 1.1、什么是视图 1.2、创建视图 1.3、使用视图 1.4、修改视图 1.5、删除视图 1.6、视图的优点 2、MySQL存储结构 2.1、MySQL中的页 3、索引 3.1、索引的数据结构 3.2、B树 和 B树 3.3、B树在MySQL索引中的应用 3.4、索引分类 1、视图 1.1、什么是视…