软件系统流程的微观流程设计
目录
在软件里,微观流程设计 = 写代码之前的“逻辑骨架”。它介于需求描述(太粗)和具体代码实现(实现)之间。目标:任何开发者照着流程,都能写出一致的实现。
标准结构(推荐模板)–在写功能点时可套用该结构:
1.流程基本信息
流程名称:数据处理流程
触发方式:UI按钮点击
所属模块:客户端/服务端
是否异步:是2.前置条件(Precondition)
- 当前状态 = Idle
- 用户已登录
- 参数已加载完成3.输入定义(Input)
- TaskId: string(必填)
- Options:ProcessOption(可选,默认值)4.主流程(Main Flow) 【重要】–逐步编号,每一步都是“不可再拆”的动作
1. UI层校验当前状态是否允许执行
2. UI层冻结交互(按钮禁用,显示进度)
3. UI层组装请求参数对象
4. UI层发起异步请求(await)
5. 服务层接受请求并校验参数是否合法性
6. 服务层检查业务状态是否冲突
7. 服务层执行业务处理
8. 服务层记录处理日志
9. 服务层返回统一结果对象
10. UI线程解析结果
11. UI层更新界面交互
12. UI恢复交互5.分支与异常流程(Branch & Exception) – 微观流程设计的灵魂
参数异常
- 主流程 step 5 校验失败
-> 返回错误码 INVALID_ARGUMENT
-> UI 显示提示
-> 终止流程业务冲突
- 主流程 step 6 冲突
-> 返回 BUSSINESS_CONFLICT
-> UI 刷新状态
-> 不允许重试系统异常
- 主流程 step 7 抛异常
-> 捕获并记录错误日志
-> 返回 SYSTEM_ERROR
-> UI 提供重试入口6.输出定义(Output)
- ResultCode
- Message
- PayLoad(可为空)7.状态变化(State Transition)
Idle -> Processing -> Success
Idle -> Processing -> Failed8.幂等/并发约束(重要)
- 同一 TaskId 不允许并发执行
- 重复请求返回统一结果工程化拆解
客户端(WPF)
View
└── Command / Event
└── ViewModel
└── ServiceProxy服务端
Controller
└── ApplicationService
└── DomainService
└── Repository微观流程中的每一步都能映射到一层代码
软件场景实例(SignalR + WPF)
场景介绍: WPF发起任务—>服务处理—>实时回传进度
微观流程:
1. WPF 点击 “开始”
2. 禁用按钮,初始化进度条
3. 调用 SignalR Hub.StartTask(taskId)
4. Hub 校验连接状态
5. Hub 将任务请求投递到处理队列
6. 后台服务执行任务
7. 后台通过 SignalR 推送进度
8. WPF UI 线程更新进度
9. 任务完成/失败通知
10. UI 恢复可操作状态异步路径:SignalR断线,重复点击,任务超时
可以用以下问题来自检所设计的微观流程:
- 这一步谁负责?
- 失败了走那条路?
- 是否影响状态?
- 是否可能被重复触发?
- 是否跨线程/跨进程?
若有一个问题答不上来,就说明流程还不够微观。