目录

软件系统流程的微观流程设计

在软件里,微观流程设计 = 写代码之前的“逻辑骨架”。它介于需求描述(太粗)和具体代码实现(实现)之间。目标:任何开发者照着流程,都能写出一致的实现。

标准结构(推荐模板)–在写功能点时可套用该结构:

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 -> Failed

8.幂等/并发约束(重要)

- 同一 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断线,重复点击,任务超时

可以用以下问题来自检所设计的微观流程:

  1. 这一步谁负责?
  2. 失败了走那条路?
  3. 是否影响状态?
  4. 是否可能被重复触发?
  5. 是否跨线程/跨进程?

若有一个问题答不上来,就说明流程还不够微观。