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