OOAD操作指南
OOAD操作指南
一、OOAD是什么
OOAD(Object-Oriented Analysis and Design)是面向对象分析与设计的简称,分为两个阶段:
- OOA(分析阶段):理解业务,确定”做什么”
- OOD(设计阶段):设计实现方案,确定”怎么做”
二、OOAD要完成的任务
| 步骤 | 阶段 | 核心任务 | 产出物 | 与下一步的关系 |
|---|---|---|---|---|
| 1 | 需求分析 | 理解用户需求 | 需求文档、用例图 | 为领域建模提供业务对象线索 |
| 2 | 领域建模 | 识别业务对象和关系 | 领域模型、类图 | 为类设计提供对象定义 |
| 3 | 类设计 | 设计类的属性和方法 | 详细类定义 | 为架构设计提供基础单元 |
| 4 | 架构设计 | 确定系统层次和模块 | 架构图、分层设计 | 为详细设计提供结构框架 |
| 5 | 详细设计 | 设计对象交互流程 | 时序图、接口定义 | 指导编码实现 |
三、OOAD执行步骤
步骤1:需求分析
做什么:收集和理解用户需求
怎么做:
- 与用户沟通,收集功能需求
- 识别系统参与者和用例
- 编写用例描述
示例:电商系统需求
1 | 参与者:顾客、商家、管理员 |
步骤2:领域建模
做什么:基于需求分析结果,找出业务中的关键对象和它们的关系
怎么做:
- 从需求文档中识别名词(候选对象):关注需求描述中的业务实体
- 筛选核心领域对象:去除冗余,保留与业务密切相关的对象
- 确定对象属性:识别对象的关键特征
- 确定对象之间的关系:关联、聚合、组合、继承
示例:基于电商需求分析的领域模型
1 | 需求中的名词:用户、商品、订单、订单项、购物车、支付记录... |
步骤3:类设计
做什么:将领域对象转化为程序类,为架构设计提供基础单元
怎么做:
- 根据领域模型,定义类名、属性、方法
- 确定类之间的关系(继承、关联、组合)
- 应用设计原则(SOLID)
- 为架构分层做准备:识别哪些类属于领域层,哪些属于应用层
示例:
1 | // 领域层类 - 包含核心业务逻辑 |
步骤4:架构设计
做什么:确定系统的整体结构,将类组织到合适的层次和模块中
4.1 常见架构模式
| 模式 | 适用场景 | 核心思想 |
|---|---|---|
| 分层架构 | 大多数企业应用 | 按职责分层:表现层→应用层→领域层→基础设施层 |
| MVC | Web应用 | 分离Model、View、Controller |
| 微服务 | 大型分布式系统 | 按业务拆分独立服务 |
4.2 架构选型建议
简单决策法:
- 小型项目/团队 → 使用分层架构(推荐)
- 复杂业务逻辑 → 在分层架构基础上增加领域层
- 大型分布式系统 → 考虑微服务
4.3 分层架构设计(推荐)
四层结构:
1 | ┌─────────────────────────────────────┐ |
层间规则:
- 上层可以调用下层,下层不能调用上层
- 只能调用相邻层,不能跨层
- 层间通过接口交互,使用DTO传递数据
模块划分示例:
1 | src/ |
步骤5:详细设计
做什么:基于架构设计,设计对象之间的交互流程
怎么做:
- 绘制时序图:描述请求在各层之间的流转过程
- 设计接口参数:定义每层接口的输入输出
- 确定异常处理:每层如何捕获和转换异常
示例:基于分层架构的下订单流程
1 | 用户请求 |
设计要点:
- 严格遵循架构设计的层次结构
- 每层只处理本层职责(表现层做参数校验,领域层做业务规则)
- 层间通过DTO传递数据,避免直接暴露领域对象
四、OOAD核心原则
| 原则 | 含义 | 实践建议 |
|---|---|---|
| 单一职责 | 一个类只做一件事 | 类功能要聚焦 |
| 开闭原则 | 对扩展开放,对修改关闭 | 使用接口和抽象类 |
| 依赖倒置 | 依赖抽象而非具体 | 通过接口交互 |
| 高内聚 | 内部元素紧密相关 | 相关功能放一起 |
| 低耦合 | 减少类之间的依赖 | 降低相互影响 |
五、简单示例:学生选课系统
需求
- 学生可以选课、退课
- 老师可以查看选课学生
- 课程有人数限制
领域模型
1 | 学生(Student) --选修--> 课程(Course) |
类设计
1 | public class Student { |
调用流程
1 | 学生请求选课 → 选课Service → 检查课程容量 → 创建选课记录 → 更新课程人数 → 返回结果 |
六、总结
OOAD的核心过程:
- 分析:理解需求,识别对象
- 设计:定义类结构,确定关系
- 实现:按设计编码,保持结构
关键记住:先分析清楚业务,再设计实现方案。