架构师论文备考-论特定领域软件架构

news/2024/9/29 3:26:11/

摘要

        在2022年3月,我加入了公司新智慧公交平台系统的研发团队,担任架构师一职。我参与了系统整体架构的讨论与设计,并在软件设计方面,指导了调度模块的设计与开发。新智慧公交平台以调度模块为核心,旨在为公交行业调度人员提供一个日常操作与办公的高效平台。因此,公交调度业务模块成为我们设计的焦点。调度模块采用了DSSA(特定领域软件架构)方法,并结合DDD(领域驱动设计)理念,通过再工程手段,利用现有系统的领域需求模型,融合现场用户反馈和产品经理的架构需求,对核心调度系统进行了全面重构。截至2022年12月初,项目顺利上线,并一直保持稳定运行,获得了用户的高度评价。这一成果归功于特定领域软件架构的应用,它显著提升了领域模型的精确度和可复用性,同时增强了系统的可读性和可维护性。

正文

        在互联网+信息时代的浪潮下,众多行业纷纷将业务重心转移到互联网软件平台,以信息数据为基础进行业务运作。公交行业因其业务流程的复杂性,技术发展相对滞后。我公司抓住这一转型机遇,运用再工程技术重构传统公交调度平台,并融合公司中台战略,以及大数据、云原生、小程序等前沿技术,共同打造了以物联网为基础,互联网为门户的新一代智慧公交平台。该项目预计总投资2000万元,历时9个月。

        2022年3月,我有幸参与公司新智慧公交平台系统的研发,担任架构设计师与软件设计师的角色。在项目启动阶段,我们集中讨论了系统架构方案,特别关注了核心调度模块的设计,因为调度业务领域是公交公司用户最为关心的核心环节。经过团队内部及与各方利益相关者的深入探讨,我们最终确定采用DSSA(特定领域软件架构)作为我们的架构设计蓝图。这一决策为后续的系统开发奠定了坚实的基础,确保了平台能够满足公交行业复杂多变的需求。

        DSSA 特定领域架构主要包含三个主要阶段,第一阶段是领域分析,在领域分析阶段,我们的目标是深入理解公交调度业务的核心需求和领域逻辑。第二阶段是领域设计,重点是创建一个能够满足领域需求的DSSA架构。第三阶段是领域实现,研发团队根据设计的架构蓝图进行具体的编码实现。在此过程中,我们的产品经理作为领域专家的角色,主要负责对原有调度业务需求的解构和总结,并形成领域需求模型;我作为本次的领域分析人员和领域设计人员的角色,主要负责对领域需求进行解读,最终形成针对调度系统的DSSA 领域架构;其他参与的研发人员则作为本次的领域实现人员,主要负责实现领域业务需求,并支持后续的测试和代码修改等工作。接下来我将主要对DSSA 架构的分析、设计过程进行详细的描述。

        经过领域专家的深入分析,我们成功构建了以路单完结、车辆到离站、司机考勤、业务请求处理、业务变更、发车通知等关键业务为核心的领域模型。我们采用面向对象的方法论,利用UML图对这些核心业务流程进行了详细描述,形成了需求文档和概要设计文档,这为后续的开发工作提供了清晰的指导。在全面分析领域模型的过程中,我们注意到每个模型的业务流程都极为复杂,涉及多个处理环节,并且存在领域模型之间的相互依赖和调用。为了简化这一复杂性,我们决定引入规则引擎框架liteflow。通过将复杂的业务流程分解为多个独立的流程控制节点,我们不仅降低了业务处理的复杂度,还显著提升了代码的整体可读性。

        在深入分析领域模型的应用场景后,我们识别出两个主要的使用场景。首先是面向调度人员的场景,他们通过网页界面进行调度操作。其次是面向司机的设备交互场景,司机通过设备发送信令以执行考勤签到、业务变更等操作。针对调度人员的使用场景,我们采用了封装API接口的方法。在软件架构设计上,我们遵循领域驱动设计(DDD)的原则,具体实现如下:adapter层:封装了与前端交互的控制器(controller)接口,负责处理用户的输入和输出。server层:作为应用服务的中间层,主要负责调用领域模型,并作为胶水代码协调不同系统间的交互,以实现完整的业务功能。domain层:封装了调度业务的核心领域模型,提供以领域模型为中心的功能调用。

        对于设备交互场景,由于其过程具有隐式和不确定性,我们选择了事件驱动的架构风格来实现领域模型与设备的交互。交互流程如下:S17平台(设备网络层)通过Kafka(消息中间件)接收设备发送的信令,并将其转换为公交系统可识别的消息格式。Tap服务(公交设备交互服务)通过Kafka接收到消息后,将其分发到相应的信令处理模块。如果处理模块需要领域模型的支持,Tap服务会通过事件调用的方式,将消息发送至Kafka。Dispatch服务(调度服务)监听指定事件,接收消息后调用领域模型处理流程,并最终发送响应信令以完成设备交互。这样的设计确保了系统既能高效地处理调度人员的操作,也能灵活地应对设备端的动态交互需求。

        我们最终采用DSSA(特定领域软件架构)结合流程引擎框架和DDD(领域驱动设计)的方法,成功完成了调度模块的设计与开发。尽管DSSA架构的应用在一定程度上提升了项目的复杂度,但设计风险得到了有效控制。通过运用DSSA和DDD设计理念,我们显著提高了项目的可修改性,为未来的维护工作打下了坚实的基础。

        自2022年12月项目上线以来,系统表现优异,经过两年的运行,其在性能和可扩展性方面得到了用户和开发团队的一致好评。这次项目开发的实践,不仅加深了我对特定领域架构的理解,也为我未来的架构设计工作带来了新的视角和宝贵经验。


http://www.ppmy.cn/news/1530803.html

相关文章

MySQL连接查询解析与性能优化成本

文章目录 一、连接查询1.连接查询基础1. INNER JOIN内连接2. LEFT JOIN (或 LEFT OUTER JOIN)左外连接3. RIGHT JOIN (或 RIGHT OUTER JOIN)右外连接4. FULL OUTER JOIN 2.连接查询的两种过滤条件3.连接的原理 二、性能优化成本1.基于成本的优化2.调节成本常数(1)mysql.server_…

关于公司小程序项目在登录流程获取token并全局使用的梳理(学习篇)

首先打开公司的项目,由于公司前端使用的是tarojsvuebabel,因此需要先安装tarojs-cli并运行编译 之后研究前端前辈们的代码,来学习一下前端怎么获取token并全局使用 首先思路搞清楚,token是通过调取后端的登录接口,并…

接口自动化

一、数据库及数据库操作概念 1.数据库概述 概念 存数据的仓库,程序中数据的载体 数据库和变量都可以存储数据,二者有什么区别? 持久性不同:数据库可以持久性存储数据(将数据写入磁盘文件),而变量不能(运行在内存中) 分类: 关系型数据库(MySQL、Oracle、SQLite):安全 由行和…

前端sm2国密加密时注意

如下方法: export function encrypt(str) {const sm2 require("sm-crypto").sm2;const cipherMode 1; // 1 - C1C3C2,0 - C1C2C3,默认为1//自定义密钥let publicKey "xxxxxxxx";//此处加密let a sm2.doEncrypt(str,…

OpenCV特征检测(8)检测图像中圆形的函数HoughCircles()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在灰度图像中使用霍夫变换查找圆形。 该函数使用霍夫变换的一种修改版本在灰度图像中查找圆形。 例子&#xff1a; #include <opencv2/imgp…

Mac优化清理工具CleanMyMac X 4.15.6 for mac中文版

CleanMyMac X 4.15.6 for mac中文版下载是一款功能更加强大的系统优化清理工具&#xff0c;软件只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉&#xff0c;节省宝贵的磁盘空间。CleanMyMac X 4.15.6 for mac 软件与最新macOS系统更加兼容&#xff0c;流畅地…

零成本玩转企业微信!2024年邮箱功能新升级,速来get√

在这个网络时代&#xff0c;公司聊天和管理得快不快&#xff0c;对公司能不能赢很关键。企业微信是腾讯给公司做的聊天和办公工具&#xff0c;因为功能多、用着方便&#xff0c;很多公司都喜欢用。不过&#xff0c;新用企业微信的公司最想知道的是&#xff1a;用这个要不要花钱…

Spring Boot框架:蜗牛兼职网实现

第3章 系统分析 3.1 需求分析 蜗牛兼职网主要是为了提高工作人员的工作效率和更方便快捷的满足用户和企业&#xff0c;更好存储所有数据信息及快速方便的检索功能&#xff0c;对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定考虑用户和企业的可操作性&#xff0…