第一部分:需求分析基础

理解需求分析的核心概念与流程

学习目标

掌握需求收集、分析、文档化的方法与技巧

1

需求收集方法

  • 用户访谈:与关键用户一对一深入交流
  • 问卷调查:大规模收集用户需求
  • 原型演示:通过原型获取用户反馈
  • 竞品分析:研究市场上类似产品
  • 文档分析:研究现有系统文档
2

需求分类

需求类型 描述 示例
功能需求 系统必须提供的功能 用户登录、数据导出
非功能需求 系统运行的质量属性 性能、安全性、可用性
业务需求 高层次业务目标 提高客户满意度30%
用户需求 用户期望系统完成的任务 用户可在线提交申请
R1

用户管理功能需求

描述:系统应提供用户账户管理功能

详细需求:

  • 用户应能通过邮箱注册账户
  • 用户应能修改个人资料信息
  • 管理员应能禁用/启用用户账户
  • 系统应记录用户最后登录时间

优先级:

需求分析最佳实践

  • 使用用户故事描述功能需求:"作为[角色],我希望[功能],以便[价值]"
  • 为每个需求定义清晰的验收标准
  • 使用MoSCoW法则划分需求优先级
  • 定期与利益相关者确认需求理解

第二部分:系统设计方法

从架构设计到详细设计的完整流程

学习目标

掌握分层架构、模块划分、接口设计等核心设计方法

架构设计

模块设计

详细设计

1

分层架构设计

典型Java应用分层架构:

分层架构图

+-------------------+

| 表示层 (View) |

+-------------------+

+-------------------+

| 控制层 (Controller) |

+-------------------+

+-------------------+

| 服务层 (Service) |

+-------------------+

+-------------------+

| 数据访问层 (DAO) |

+-------------------+

+-------------------+

| 数据库 (DB) |

+-------------------+

2

模块划分原则

  • 高内聚低耦合:模块内部紧密相关,模块间依赖最小化
  • 单一职责:每个模块只负责一个功能领域
  • 接口隔离:定义清晰的接口边界
  • 可替换性:模块应易于替换实现
  • 可测试性:模块应易于独立测试
接口设计示例
/** * 用户服务接口 */
public interface UserService {

/** * 根据ID获取用户 * @param id 用户ID * @return 用户对象 */
User getUserById(long id);

/** * 创建新用户 * @param user 用户对象 * @return 创建后的用户对象(包含ID) */
User createUser(User user);

/** * 更新用户信息 * @param user 用户对象 */
void updateUser(User user);

/** * 删除用户 * @param id 用户ID */
void deleteUser(long id);

/** * 根据用户名搜索用户 * @param username 用户名(支持模糊查询) * @return 匹配的用户列表 */
List<User> searchUsers(String username);
}

第三部分:UML建模技术

使用UML进行系统建模与设计

学习目标

掌握用例图、类图、序列图等核心UML图的使用

用例图 (Use Case)

描述系统功能与用户交互

[用户] --- (登录)

[用户] --- (查看个人信息)

[管理员] --- (管理用户)

[管理员] --- (查看报表)

类图 (Class Diagram)

展示系统静态结构

+---------------------+

| User |

+---------------------+

| -id: Long |

| -username: String |

| -email: String |

+---------------------+

| +getOrders(): List |

+----------↑----------+

|

+----------+----------+

| Order |

+---------------------+

序列图 (Sequence Diagram)

展示对象间交互时序

用户 -> 控制器: 提交登录请求

控制器 -> 服务层: 验证用户

服务层 -> DAO: 查询用户

DAO -> 数据库: 执行查询

数据库 --> DAO: 返回结果

DAO --> 服务层: 返回用户

服务层 --> 控制器: 返回验证结果

控制器 --> 用户: 返回响应

UML建模工具推荐

  • Enterprise Architect - 专业级建模工具
  • Visual Paradigm - 强大的UML工具
  • PlantUML - 文本方式生成UML图
  • Lucidchart - 在线协作工具
  • Draw.io - 免费在线图表工具

第四部分:设计模式应用

常用设计模式在Java项目中的应用

学习目标

理解常用设计模式及其适用场景

1

创建型模式

工厂模式 (Factory Pattern)

封装对象创建过程,提高灵活性

public interface Logger {
    void log(String message);
}

public class FileLogger implements Logger { ... }
public class ConsoleLogger implements Logger { ... }

public class LoggerFactory {
    public static Logger getLogger(String type) {
        if ("file".equals(type)) {
            return new FileLogger();
        }
        return new ConsoleLogger();
    }
}
单例模式 (Singleton Pattern)

确保类只有一个实例

public class DatabaseConnection {
    private static DatabaseConnection instance;

    private DatabaseConnection() {} // 私有构造器

    public static synchronized DatabaseConnection getInstance() {
        if (instance == null) {
            instance = new DatabaseConnection();
        }
        return instance;
    }
}
2

行为型模式

策略模式 (Strategy Pattern)

定义算法族,封装可互换的行为

public interface PaymentStrategy {
    void pay(double amount);
}

public class CreditCardPayment implements PaymentStrategy { ... }
public class PayPalPayment implements PaymentStrategy { ... }

public class ShoppingCart {
    private PaymentStrategy paymentStrategy;

    public void setPaymentStrategy(PaymentStrategy strategy) {
        this.paymentStrategy = strategy;
    }

    public void checkout(double amount) {
        paymentStrategy.pay(amount);
    }
}
观察者模式 (Observer Pattern)

定义对象间的一对多依赖关系

public interface Observer {
    void update(String message);
}

public class Subject {
    private List<Observer> observers = new ArrayList<>();

    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    public void notifyObservers(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }
}

第五部分:数据库设计

设计高效、可扩展的数据库结构

学习目标

掌握数据库规范化、索引优化等设计技巧

1

数据库设计步骤

  1. 识别实体和关系
  2. 定义实体属性
  3. 应用规范化(1NF→3NF)
  4. 定义主键和外键
  5. 设计索引策略
  6. 考虑分区和分表
2

数据库设计示例

-- 用户表
CREATE TABLE users (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE,
    password_hash CHAR(64) NOT NULL, -- SHA-256哈希
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- 订单表
CREATE TABLE orders (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    user_id BIGINT NOT NULL,
    total_amount DECIMAL(10,2) NOT NULL,
    status ENUM('PENDING', 'PAID', 'SHIPPED', 'COMPLETED', 'CANCELLED') DEFAULT 'PENDING',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

-- 创建索引
CREATE INDEX idx_orders_user ON orders(user_id);
CREATE INDEX idx_orders_status ON orders(status);

数据库设计最佳实践

  • 使用有意义的表名和列名
  • 为每个表定义主键
  • 适当使用外键约束保证数据完整性
  • 为常用查询条件创建索引
  • 考虑数据归档策略
  • 设计合理的分区策略(按时间/范围)

第六部分:常见错误与解决方案

避免需求分析与设计阶段的常见陷阱

常见错误 后果 解决方案
需求不明确 开发方向错误,频繁返工 使用原型确认需求,编写详细需求文档
过度设计 开发周期长,系统复杂 遵循YAGNI原则(You Ain't Gonna Need It)
忽略非功能需求 系统性能差,用户体验不佳 明确性能、安全、可用性等指标
模块耦合度高 维护困难,扩展性差 应用SOLID原则,设计清晰接口
数据库设计不合理 查询性能差,数据冗余 遵循数据库规范化原则,合理使用索引
缺乏文档 知识传递困难,维护成本高 坚持编写设计文档,保持文档更新

需求变更管理

项目开发过程中需求变更是不可避免的。有效的变更管理策略包括:

  • 建立正式的变更请求流程
  • 评估变更对项目范围、时间和成本的影响
  • 优先处理高价值变更
  • 保持设计文档与代码同步更新
  • 使用版本控制系统管理设计文档

第七部分:总结与最佳实践

巩固需求分析与设计知识体系

需求分析与设计关键点

  • 需求收集:使用多种方法全面收集需求
  • 需求文档:编写清晰、可测量的需求文档
  • 架构设计:选择合适的分层架构
  • 模块划分:遵循高内聚低耦合原则
  • 接口设计:定义清晰的接口规范
  • UML建模:使用UML图可视化设计
  • 设计模式:合理应用设计模式解决常见问题
  • 数据库设计:规范化与性能平衡

需求分析设计工作流程

需求收集
需求分析
系统设计
详细设计
设计评审

实践建议

  1. 选择一个实际项目(如电商系统、博客平台)进行完整的需求分析与设计
  2. 创建需求文档、UML图、数据库设计等完整设计文档
  3. 组织设计评审会议,模拟团队评审过程
  4. 使用Git管理设计文档版本
  5. 尝试使用不同架构风格(微服务、单体、事件驱动)设计同一系统