# 设计规约

> 来源: Java开发手册（嵩山版）— 七、设计规约

## 【强制】规则

### 1. 存储方案评审一致通过

存储方案和底层数据结构的设计获得评审一致通过，并沉淀为文档。

### 2. 用例图

与系统交互的 User 超过一类且 User Case 超过 5 个时，使用用例图。

### 3. 状态图

业务对象状态超过 3 个时，使用状态图明确状态转换条件和关系。

### 4. 时序图

功能调用链路涉及对象超过 3 个时，使用时序图表达输入输出。

### 5. 类图

模型类超过 5 个且存在复杂依赖关系时，使用类图。

### 6. 活动图

超过 2 个对象存在协作关系且需表示复杂流程时，使用活动图。

## 【推荐】规则

### 7. 架构设计目标

- 确定系统边界（做与不做）
- 确定模块间依赖关系
- 确定演化原则
- 确定非功能性需求（安全性、可用性、可扩展性）

### 8. 评估异常流程

需求分析时充分评估异常流程与业务边界。

### 9. 单一职责原则

类在设计与实现时要符合单一原则。

### 10. 优先聚合/组合

谨慎使用继承，优先使用聚合/组合。不得已用继承时须符合里氏代换原则。

### 11. 依赖倒置原则

尽量依赖抽象类与接口。

### 12. 开闭原则

对扩展开放，对修改闭合。

### 13. DRY 原则

共性行为抽取公共模块，不出现重复代码。

### 14. 敏捷开发不等于不设计

核心关键点上必要设计和文档沉淀是需要的。

## 【参考】

### 15. 设计文档作用

明确需求、理顺逻辑、后期维护，次要目的指导编码。

### 16. 可扩展性本质

找到系统的变化点，并隔离变化点。

### 17. 设计本质

识别和表达系统难点。

### 18. 代码不是文档

清晰的代码只是文档的片段，不是全部。

### 19. 无障碍设计

- 所有可交互控件可 tab 聚焦
- 验证码提供图形外的其它方式
- 自定义控件明确交互方式
