news 2026/10/11 6:34:37

“模块化单体 + DDD + 绞杀式迁移”,不要直接拆微服务或一次重写设备流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
“模块化单体 + DDD + 绞杀式迁移”,不要直接拆微服务或一次重写设备流程

“模块化单体 + DDD + 绞杀式迁移”,不要直接拆微服务或一次重写设备流程。这个项目是 WPF 工控测试系统,核心风险是安全、硬件时序与现场可恢复性,而不是项目文件数量。

当前最适合作为切入点的是工站域:已有 [状态机]、[命令邮箱]和 [操作日志]。但它们仍在 WPF 工程,且 20 个文件直接读写EnvironmentData.StationDatas,54 个文件使用静态Default/Instance入口,状态所有权尚未收敛。MaxWell.Models也混合了领域、CSV/数据库、配置和 WPF 可绑定模型,例如 Recipi 直接继承ObservableObject。测试与预测试类又达到 2,573 / 1,538 行,难以安全验证重构。

目标架构

WPF / Automation TCP / SECS-GEM | Application(命令、用例、流程编排) | Domain(规则、聚合、领域事件) | Infrastructure(SQLite、CSV、配置、日志、设备适配器) | 现有 PLC / 主控板 / 扫码枪 / RFID / EAP 驱动

领域层不得引用 WPF、Dapper、SQLite、NLog、设备 DLL 或EnvironmentData。现有设备工程保留为基础设施适配器,不把寄存器、报文和 PLC 点位强行“领域化”。

建议划分以下限界上下文:

上下文聚合与职责
工站运行Station:模式、生命周期、安全锁存、当前批次、版本号;状态转移唯一入口
批次追溯Batch:批号、工站、冻结的配方版本、治具快照、开闭批规则
产品流转UnitUnderTest:条码、位置、治具、Host 接收决定、流转状态
测试执行TestRun:预测试/正式测试、结果、失败原因;大量测量值采用追加式结果存储,不塞进大聚合
配方管理RecipeRevision:不可变、已版本化;开批后只能使用冻结版本
易损件与维护Consumable、寿命规则、到期联锁
主机集成Automation/SECS-GEM 仅做命令与事件翻译,通过防腐层隔离协议细节

AutomaticStationPipeline应定位为应用层 Process Manager:它协调异步硬件动作,不应成为领域实体。Station、Batch、TestRun负责“是否允许”,应用层负责“何时调用设备适配器”。

关键命令统一为OpenBatch、SubmitSot、AcceptHostItem、StartTest、FinishTest、UnloadUnit、CloseBatch、ResetStation。领域事件包括BatchOpened、UnitLoaded、HostItemAccepted、TestCompleted、SafetyInterlockTriggered、BatchClosed。UI、TCP 和 SECS/GEM 都只能调用同一组命令,不能再直接改工站状态。

持久化上不要立即使用 Event Sourcing。将现有StationOperationJournal演进为 SQLite 中的“操作检查点 + Outbox”即可:每个命令具备OperationId、聚合版本和幂等键;设备指令失败可重试;进程重启发现未完成操作时保持“需要人工确认/复位”,绝不自动续跑。这与当前安全策略一致。

12 周迁移计划

阶段周期交付物与验收
0. 业务建模与护栏1 周事件风暴、术语表、状态转移表、PLC/Host 时序图;为开批、停机、复位、结批建立特征测试
1. 建立边界1 周新建MaxWell.Domain、Application、Infrastructure、ArchitectureTests;编译期禁止 Domain 依赖 UI、数据库和设备
2. 工站与批次纵切2 周迁移OpenBatch/CloseBatch;Station和Batch成为唯一写入口;WPF 先通过适配器双读旧状态与新投影
3. 上料与主机协作3 周迁移SOT -> 扫码 -> Host 接收 -> 搬运;以UnitUnderTest替代依赖 ViewModel 的临时状态
4. 测试与结果3 周将预测试/正式测试拆为策略、规则和设备执行器;结果写入改为 Outbox 驱动的 CSV/SQLite 投影
5. 收口与下线2 周迁移易损件、配方冻结、恢复流程;删除新路径中的EnvironmentData写入与*.Default服务定位

实施顺序上,第一条生产纵切应选择“开批/结批”,不要先改停机、复位或急停。安全动作先保持现有硬件路径,并在动作完成后记录领域事实;待覆盖现场故障注入、断电恢复和并发命令测试后,再由应用层统一编排。

验收指标应明确为:UI 和协议层零直接写领域状态;每个状态转移有测试;同一工站命令可串行、跨工站可并行;重复 TCP/SECS 报文幂等;任一阶段异常退出后可识别在制品且不会自动误动作;配方、治具和测试结果可按批次版本完整追溯。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 6:31:33

组合式非结构化数据分析实战:从文档解析到大模型抽取的采购单据处理

平时接数据分析和自动化处理的活儿,我大部分时间都耗在两类事情上:一是把 PDF、网页、图片里那些格式混乱的内容抽出来,二是把这些半结构化甚至完全非结构化的数据规整成能塞进数据表或数据库的样子。之前一直靠正则表达式和各种解析脚本凑合…

作者头像 李华
网站建设 2026/10/11 6:30:46

SpringBoot+微信小程序:社区医疗服务系统全栈开发实战

初识这个项目:社区医疗服务为什么要上小程序这两年社区医疗的需求越来越细,居民不再满足于“能挂个号、能拿点药”,而是希望在家门口解决建档、随访、慢病管理、预约接种这类高频小事。但很多社区卫生服务中心的系统还停留在PC端,…

作者头像 李华
网站建设 2026/10/11 6:30:30

YOLOv11目标检测:从PyTorch训练到ONNX部署全流程实战

简介:面向零基础学习者的目标检测实战文档,系统讲解YOLOv11从PyTorch训练到ONNX跨平台部署的完整链路。内容涵盖YOLOv11核心架构、环境搭建、数据准备与标注、模型训练及评估优化、ONNX转换与跨平台部署,并附常见问题解决方案,适合…

作者头像 李华
网站建设 2026/10/11 6:30:12

性能测试调优实战:从JMeter基线到存储与链路优化

做性能测试这行有个特点:表面看是压测、调参数、看报告,实际上每一次有效果的优化背后,都是对存储、链路、运行时的整体理解。标题里“积微成著”这四个字我越来越有体会,性能问题几乎很少是单一原因造成的,真正见效快…

作者头像 李华
网站建设 2026/10/11 6:28:26

AI知识库整理:个人IP内容输出的弹药库与观点系统实战指南

先说结论:个人IP这事儿,九成以上的卡点不是不会写、不会拍,而是脑子里有货但输出时捞不出来。你觉得自己懂很多,可真要写一篇深度观点、做一场直播连麦,或者回一个粉丝提问,你会发现素材是零散的、观点是陈…

作者头像 李华
网站建设 2026/10/11 6:26:14

AnyPS5项目解析:跨平台游戏兼容性技术探析

我无法基于当前输入生成符合要求的博文。原因如下:输入中仅提供了项目标题"AnyPS5",但未提供任何实质性的【项目正文】、【关键词】或【摘要描述】;所谓“相关热搜词”和“最新网络热词”字段为空,无实际内容可供分析&a…

作者头像 李华