如何确定state diagram中的state?结合图书馆删除图书记录场景
UML 状态图中 State 的核心定义
State 是系统/对象在生命周期中处于的相对稳定、可停留的持续阶段,本质是满足特定条件、等待特定触发事件、或执行特定长时活动的场景,瞬时完成的动作不属于 State,而是触发状态之间转移的触发器。
举个简单的区分例子:
- 「等待用户输入登录凭证」是 State,用户停留在登录页的阶段会持续保持这个状态
- 「用户提交登录表单」是触发器,是瞬时完成的动作,用来触发状态从「等待登录输入」转移到「登录信息校验中」
针对你的场景的状态图设计校验
结合你描述的图书管理系统删除图书流程,你的设计需要符合以下规则才算正确,你可以对照你绘制的图自查:
合理的状态列表参考
- 初始状态:未登录
- 登录信息校验中
- 访问权限鉴权中
- 功能模块选择页
- 数据库模块操作页
- 图书记录列表展示页
- 删除操作二次确认中
- 删除逻辑执行中
- 已登出(终止状态)
常见的设计错误自查点
如果你的图存在以下问题则需要调整:
- 把瞬时动作当成了状态:比如出现「提交登录」「点击删除按钮」这类动宾结构的动作作为状态节点
- 没有做权限分支校验:普通用户进入图书记录列表页后,状态应该是「无删除权限的图书记录展示页」,无法触发删除相关的状态转移
- 缺失异常分支:比如登录信息错误、删除执行失败没有对应的回退状态,直接走了主流程
优化建议
- 所有状态节点统一用「名词+状态描述」的命名规则,避免用动词开头的动作短语
- 普通用户和管理员的状态分支要拆分开:鉴权完成后,两种角色进入的功能模块页、数据库操作页、图书记录列表页属于不同的状态,可用复合状态简化绘制
- 如果你为了简化场景直接把删除完成后的跳转设为登出,只需要在「删除逻辑执行中」状态的完成触发器后加转移到「已登出」的边即可,符合简化需求
内容的提问来源于stack exchange,提问作者Chin
相关产品推荐
相关产品推荐

