UML 用例图实战:知乎问答系统 4 大核心场景与 12 个关键用例解析
UML用例图实战:知乎问答系统核心场景与关键用例深度解析
1. 从业务需求到UML用例图的转化方法论
在构建知乎类问答系统的UML用例图时,我们需要遵循"业务场景→用户行为→系统功能→用例抽象"的四层转化逻辑。以"提问"场景为例:
- 原始业务流:用户登录→点击提问按钮→输入问题内容→选择话题标签→提交审核→发布成功
- 关键行为提取:
- 账户验证(前置条件)
- 内容编辑(核心交互)
- 话题关联(扩展点)
- 审核触发(异常流)
- 用例抽象结果:
@startuml actor 普通用户 as User rectangle 知乎系统 { usecase "提问" as UC1 usecase "内容审核" as UC2 usecase "话题管理" as UC3 } User --> UC1 UC1 .> UC2 : <<include>> UC1 .> UC3 : <<extend>> @enduml
常见误区规避:
- 避免将操作步骤直接作为用例(如"点击按钮")
- 区分核心功能与异常流程(如主流程与审核驳回流程)
- 合理设置抽象层级(如"内容管理"vs"问题编辑")
2. 四大核心场景的用例规约设计
2.1 提问场景用例规约
用例名称:发布问题
主要参与者:注册用户
前置条件:
- 用户已通过身份认证
- 账户未被限制提问功能
基本事件流:
- 用户进入提问界面
- 系统加载用户常用话题列表(可选)
- 用户输入问题标题(长度≤50字)
- 用户补充问题描述(长度≤5000字)
- 系统实时进行内容安全检测
- 用户选择1-5个关联话题
- 用户提交问题
- 系统生成审核任务
- 审核通过后问题公开显示
扩展点:
- 3a. 标题含敏感词:
- 系统实时提示修改建议
- 用户需调整后继续
- 5a. 检测到高风险内容:
- 系统自动进入人工审核队列
- 发送站内通知告知用户
业务规则:
| 规则编号 | 描述 | 触发条件 |
|---|---|---|
| BR-001 | 新用户每日提问上限5个 | 注册时间<30天 |
| BR-002 | 含图片的问题优先展示 | 内容包含有效图片 |
| BR-003 | 热门话题关联获得流量加成 | 话题周热度>1000 |
2.2 回答场景的交互建模
回答功能涉及复杂的多方交互,建议采用序列图+状态图的组合建模:
@startuml participant 用户 participant 前端 participant 回答服务 participant 审核系统 participant 通知服务 用户 -> 前端: 点击"写回答" 前端 -> 回答服务: 加载问题详情 回答服务 --> 前端: 返回问题数据 前端 -> 用户: 显示编辑界面 用户 -> 前端: 输入回答内容 前端 -> 回答服务: 提交回答草案 回答服务 -> 审核系统: 发起内容审核 alt 审核通过 审核系统 -> 回答服务: 确认发布 回答服务 -> 通知服务: 触发问题更新通知 else 审核驳回 审核系统 -> 回答服务: 返回驳回原因 回答服务 -> 用户: 显示修改建议 end @enduml关键状态迁移:
stateDiagram-v2 [*] --> 草稿: 初始创建 草稿 --> 待审核: 提交 待审核 --> 已发布: 审核通过 待审核 --> 已驳回: 审核不通过 已驳回 --> 待审核: 重新提交 已发布 --> 已折叠: 收到多举报 已折叠 --> 已删除: 人工确认违规3. 高级用例关系建模技巧
3.1 包含关系的典型应用
在电子书购买场景中,支付流程作为独立用例被多个主用例包含:
@startuml left to right direction actor 会员用户 as VIP rectangle 电子书模块 { usecase "购买电子书" as Buy usecase "支付处理" as Pay usecase "下载管理" as Download } VIP --> Buy Buy .> Pay : <<include>> Buy .> Download : <<extend>> note right of Pay : 通用支付流程\n- 余额支付\n- 第三方支付\n- 优惠券核销 @enduml3.2 扩展关系的条件判断
内容发布场景的扩展用例应明确触发条件:
用例:内容发布 扩展点:EP-01 内容包含专业术语 条件:[术语库中存在未解释术语] 扩展用例:术语注解提示 扩展点:EP-02 内容涉及争议话题 条件:[话题敏感度>阈值] 扩展用例:争议内容警示4. Visio与PlantUML实战对比
4.1 Visio专业绘图要点
元素规范:
- 参与者使用标准人形图标
- 用例椭圆尺寸保持统一(建议1.5cm×0.8cm)
- 关系线型:
- 包含:虚线+箭头+< >
- 扩展:虚线+箭头+< >
排版建议:
- 核心用例居中布置
- 次要用例分布在四周
- 同类关系线保持平行
4.2 PlantUML代码示例
@startuml skinparam monochrome true skinparam usecase { BackgroundColor #F9F9F9 BorderColor #333 } actor 用户 actor 审核员 <<Staff>> actor 支付系统 <<External>> rectangle 知乎系统 { user --> (提问) user --> (回答) user --> (购买电子书) (提问) .> (内容审核) : <<include>> (回答) .> (内容审核) : <<include>> (购买电子书) .> (支付处理) : <<include>> (支付处理) --> 支付系统 (内容审核) --> 审核员 note top of 支付处理 : 支持方式:\n- 余额支付\n- 微信/支付宝\n- 盐选会员抵扣 } @enduml效率对比表:
| 工具类型 | 学习成本 | 版本控制 | 团队协作 | 适用场景 |
|---|---|---|---|---|
| Visio | 高 | 差 | 一般 | 正式文档输出 |
| PlantUML | 低 | 优秀 | 优秀 | 敏捷开发、技术文档 |
| Lucidchart | 中 | 良好 | 优秀 | 远程协作设计 |
5. 知乎特色功能的用例创新设计
5.1 盐选会员体系建模
@startuml actor 免费用户 as Free actor 盐选会员 as VIP rectangle 权限控制 { usecase "阅读基础内容" as UC1 usecase "解锁付费内容" as UC2 usecase "专属电子书" as UC3 Free --> UC1 VIP --> UC2 VIP --> UC3 } rectangle 增值服务 { usecase "内容打赏" as UC4 usecase "会员专属客服" as UC5 VIP --> UC5 UC4 <.. VIP : <<optional>> } @enduml5.2 多级审核机制设计
审核流程用例规约要点:
前置条件:
- 内容包含以下任一项:
- 敏感词匹配度>30%
- 新用户首次发布
- 涉及高风险话题
- 内容包含以下任一项:
备选流:
3a. 触发AI审核: 3a1. 系统调用NLP模型分析 3a2. 置信度>90%自动通过 3a3. 否则进入人工队列 5b. 争议内容处理: 5b1. 发起专家复审 5b2. 通知内容创作者 5b3. 临时展示争议标识状态迁移表:
当前状态 触发事件 下一状态 系统动作 待审核 AI审核通过 已发布 发送通过通知 待审核 AI审核拒绝 已驳回 记录拒绝原因 待审核 人工审核通过 已发布 更新内容权重 已发布 用户举报达标 待复审 降低排序权重
6. 性能与安全需求的用例表达
6.1 高并发场景设计
用例:热点问题访问 主要参与者:匿名用户 特殊需求: 1. 响应时间≤200ms(P99) 2. 支持10万QPS 3. 缓存命中率≥95% 实现约束: - 使用多级缓存架构 - 回答列表分页加载 - 静态资源CDN加速6.2 安全边界建模
@startuml left to right direction actor 外部爬虫 <<Malicious>> actor 正常用户 as User rectangle 安全防护 { usecase "数据访问" as UC1 usecase "频率限制" as UC2 usecase "人机验证" as UC3 User --> UC1 UC1 .> UC2 : <<include>> 外部爬虫 --> UC3 UC3 --> [*] : 验证失败 } @enduml安全规则示例:
def check_request_safety(user): if user.risk_score > THRESHOLD: require_captcha() if request.frequency > LIMIT: trigger_rate_limit() if detect_bot_patterns(): block_request()