论软件系统架构风格 - 指南
2025-12-07 08:53 tlnshuju 阅读(0) 评论(0) 收藏 举报xx年3月,本人参与了某省市集团公司的一个工业互联网+安全生产的编写项目,该项目重要用于搭建企业生产过程的监测预警以及满足政府相关部门的安全监管要求。本人在该项目中担任系统架构设计师,负责系统的整体架构设计工作。本文重要介绍了本系统在架构设计过程中所采用的架构风格及其具体应用。在电子巡检模块,采用B/S和C/S的混合架构,实现多场景下办公的需求;在基础档案模块,采用解释器风格,实现了动态表单机制;在监测预警模块,采用独立构件风格,实现数据采集软件和业务处理程序之间的消息传递和解耦。以上架构风格的启用,使系统在架构级别的复用度得到了提升。最终系统成功上线,得到了用户的一致好评。
客户集团原有一套国外的安全生产管理信息系统,但因本土适用性差且无法满足政府相关部门的安全监管要求,所以想要重新开发一套平台。xx年3月,本人所在公司中标了该方案。通过前期的调研,大家了解到客户想利用该系统,将企业安全生产过程中各个管理要素落实成具体的功能实现,并采集其它架构的生产点位数据进行监测预警,同时必须满足政府相关部门的安全监管要求。经过讨论,我们将系统划分为以下几个核心模块:电子巡检模块,用来实现生产区域的安全巡检;基础档案模块,用来实现安全管理过程中所有表单的信息化;监测预警模块,对接DCS平台,采集生产点位数据,当有异常数据时,产生告警信息并按照不同的规则推送给指定的人员;数据分析模块,以大屏组态构建企业安全概况的驾驶舱,以报表图表展现安全管理各个维度的汇总分析数据。项目组全体成员共17人,本人担任系统架构设计师,负责系统的整体架构设计工作。
架构风格是一套经过实践证实,可以用来指导系统各个模块如何有效组织的方法论,能使系统达到架构级别的复用。所以,针对不同模块的需求,我们选用了B/S和C/S混合架构、解释器风格和独立构件风格三种比较常见的架构风格。其中,B/S和C/S混合架构一种层次式架构,客户端和服务器基于http进行通信和交互,就是本质采用混合架构主导是为了在不同场景下发挥各自的优点;解释器风格,即人为构建一个运行环境,在该环境之上,可以解析与运行一些自定义的语言;独立构件风格,主要强调架构中的每个构件都是独立的个体,它们之间不直接通信,以降低耦合度,提升灵活性。以下将详细介绍本体系在架构设计过程中对B/S和C/S混合架构、解释器风格和独立构件风格的具体应用和效果。
一、B/S和C/S混合架构在电子巡检模块的应用
电子巡检模块的核心需求是巡检点的建立、巡检模板的制定和巡检记录的填报。在需求细化的过程中,我们了解到这三个特性点实际上是由不同岗位的人员操作完成的。巡检点的建立和巡检模板的制定由安全管理人员预先在系统中设定,巡检记录则必须由专业仪表工在现场填报。对于安全管理人员,他们日常都是电脑办公,因此采用主流的B/S架构搭建应用既能方便他们办公,也能为后续的维护带来便利。对于仪表工,他们日常都是移动办公,巡检记录的填报更适合在移动终端上做完。因此,这部分功能我们决定采用C/S架构来实现。为了实现整个电子巡检模块双端数据互通,我们决定在PC端应用增加一项点位编码设置作用,为每个巡检点配置唯一的编码,并写入NFC卡内。仪表工执行巡检任务时,通过移动终端上的APP获取设置在现场巡检点上的NFC卡编码,APP携带编码请求服务端接口获取对应的巡检模板,仪表工结束巡检记录的填报。B/S和C/S混合架构的应用成功的建立了多场景下办公的需求。 |
二、解释器风格在基础档案模块的应用
基础档案模块的核心需求是实现安全管理过程中所有表单的信息化。通过前期需求调研我们了解到客户集团下的各个子公司在同一个业务模块的表单样式各不相同,如果直接为各个子公司定制每一个表单,将造成大量的代码冗余,会给后续的项目维护增加难题。经过讨论,我们决定采用解释器风格实现动态表单机制来解决上述问题。首先,我们将动态表单功能拆分成了自定义表单功能,持久化接口和表单解析器三个部分。针对自定义表单功能,我们选用了开源的表单设计器form-generator,它封装了一些表单组件,支持用户以拖拉拽的形式进行表单设计。设计好的表单以json格式进行描述,对此我们开发了统一的CRUD接口,将其作为模板保存。当用户需要填写表单数据时,框架调用表单解析器解析用户自定义的表单模板并动态生成真实的表单。经过动态表单功能,各子公司能够可视化的创建各自的表单应用,且无需修改代码。解释器风格的使用提升了系统的灵活性和用户体验,也为后续的项目维护给出了便利。 |
三、独立构件风格在监测预警模块的应用
监测预警模块的核心需求是实现信息采集程序与业务处理程序之间的消息传递和解耦。传统的RPC形式,在发送方和接收方程序之间网络异常或者接收方程序掉线后会导致消息的丢失。告警信息需要参与后续的业务处理和数据分析,因此必须确保能被业务处理程序接收到。为了保证消息能稳定可靠的传输,并维持信息采集程序和业务处理程序之间的独立性,我们决定采用独立构件风格。因为资料采集软件运用的是Springboot框架,考虑到集成的便捷性,我们最终选用了消息中间件RabbitMQ。首先由信息采集程序维护一个持久化消息队列并关联设置一个死信队列,业务处理程序对该消息队列进行订阅。数据采集代码一旦采集到异常数据便向队列中投递告警信息,业务处理程序便能及时获取告警信息进行处理。即使业务处理程序发生了掉线,重新上线依然能获取到告警信息,即便获取失败,也能在死信队列中查询到告警信息。独立构件风格的采用降低了数据采集程序和业务处理程序之间的耦合,并增强了软件的可靠性。 |
平台历经14个月的开发测试,于xx年5月成功上线,至今运行稳定。借助该系统,客户方安全管理人员能及时的接收到各项预警信息,有效的提升了工作效率;相关领导依据各个维度的统计报表能快速的了解到整个集团实时的安全生产运行情况;企业在接受政府相关部门的安全检查时,也能通过系统的搜索和导出功能给出出相应的内容。在项目建设过程中,我们选用了合适的架构风格,不仅保证了团队成员之间的有效沟通,也提升了整个团队的开发效率,节省了大量的时间成本,扩充了开发经验。同时,架构风格的使用也优化了软件设计,提高了软件的复用度,保证了软件的质量,为后续的维护打下了坚实的基础。
当然,在软件后续运行的过程中也存在继续优化的空间。可以预见,随着系统的不断使用,数据分析模块的查询效率会随之降低,后续考虑对数据查询接口增加缓存并通过数据库的读写分离来提升系统的查询效率和稳定性。
浙公网安备 33010602011771号