03 — 开发全流程方法论

核心规律:先设计再编码,测试先行,持续交付 一句话:好的流程不是约束,而是质量的保障


一、核心规律

1.1 开发全流程模型

flowchart LR
    A["需求"] --> B["设计"]
    B --> C["编码"]
    C --> D["测试"]
    D --> E["部署"]
    E --> F["监控"]
    F -->|"反馈"| A
    
    style A fill:#e3f2fd
    style B fill:#fff3e0
    style C fill:#e8f5e9
    style D fill:#f3e5f5
    style E fill:#fce4ec
    style F fill:#ffebee

核心规律:

  • 需求→设计→编码→测试→部署→监控 是闭环,不是直线
  • 每个阶段都有质量门禁,不合格不进入下一阶段
  • 反馈循环是关键:监控数据指导下一轮需求

1.2 关键思维模型

YAGNI(你不需要它):不要提前实现不需要的功能
KISS(保持简单):简单的方案往往比复杂的更好
DRY(不要重复):重复的代码意味着重复的维护成本
AAA(准备→执行→断言):测试的基本结构

二、需求阶段

2.1 需求分析 checklist

□ 用户故事是否清晰?(As a ... I want to ... So that ...)
□ 验收标准是否可量化?
□ 边界条件是否明确?(异常/极限/并发)
□ 数据流向是否清楚?(谁产生、谁消费)
□ 接口契约是否对齐?(前后端/服务间)
□ 非功能需求是否明确?(性能/安全/可用性)

2.2 技术方案决策树

flowchart TD
    A["技术决策"] --> B{"影响用户体验?"}
    B -->|是| C["P0: 立即解决"]
    B -->|否| D{"影响开发效率?"}
    D -->|是| E["P1: 本周解决"]
    D -->|否| F{"影响系统扩展?"}
    F -->|是| G["P2: 本月解决"]
    F -->|否| H["P3: 排入迭代"]
    
    style C fill:#ffebee
    style E fill:#fff3e0
    style G fill:#e8f5e9
    style H fill:#e3f2fd

三、设计阶段

3.1 数据库设计原则

flowchart LR
    A["需求"] --> B["概念模型<br/>ER图"]
    B --> C["逻辑模型<br/>表结构"]
    C --> D["物理模型<br/>索引/分区"]
    
    style A fill:#e3f2fd
    style B fill:#fff3e0
    style C fill:#e8f5e9
    style D fill:#f3e5f5

设计检查清单:

  • 主键是否合理?(自增ID / UUID / 雪花算法)
  • 外键是否需要?(物理外键 vs 应用层约束)
  • 索引是否充分?(查询频繁字段建索引)
  • 冗余是否必要?(反范式设计权衡)
  • 软删除是否实现?(deleted_at字段)

3.2 API设计规范

RESTful 设计原则:
├── 资源用名词,动作用HTTP方法
├── URL不含动词:GET /users/123(而非 GET /getUser?id=123)
├── 版本控制:/api/v1/users
├── 统一响应格式:{ code, message, data }
└── 分页统一:?page=1&per_page=20

四、编码阶段

4.1 编码规范

□ 函数/方法不超过50行
□ 参数不超过3个(超过用DTO/对象)
□ 命名见名知意(getUserById而非getById)
□ 单一职责:一个函数只做一件事
□ 提前返回:避免深层嵌套(Guard Clause)

4.2 Code Review 要点

□ 代码是否符合规范?
□ 是否有明显的逻辑错误?
□ 是否有安全隐患?(SQL注入/XSS/越权)
□ 是否有性能问题?(N+1/大事务)
□ 是否有更好的实现方式?
□ 注释是否清晰?(解释为什么,而非是什么)

五、测试阶段

5.1 测试金字塔

flowchart TB
    subgraph E2E["E2E测试 10%"]
        E["浏览器自动化<br/>API端到端"]
    end
    subgraph Integration["集成测试 20%"]
        I["服务间调用<br/>数据库交互"]
    end
    subgraph Unit["单元测试 70%"]
        U["单个函数/方法<br/>纯逻辑测试"]
    end
    
    E --> I --> U
    style U fill:#e8f5e9
    style I fill:#fff3e0
    style E fill:#fce4ec

核心规律:单元测试越多越好,E2E测试越少越好(贵且慢)

5.2 测试编写原则(AAA)

Arrange(准备)→ Act(执行)→ Assert(断言)

test('can create user', function () {
    // Arrange
    $data = ['name' => '张三', 'email' => 'zhangsan@test.com'];
    
    // Act
    $user = User::create($data);
    
    // Assert
    expect($user->name)->toBe('张三');
    expect($user->email)->toBe('zhangsan@test.com');
});

六、部署与监控

6.1 部署策略对比

策略优点缺点适用场景
直接部署简单有风险内部工具
蓝绿部署回滚快资源翻倍重要服务
滚动更新资源省有过渡期大多数场景
灰度发布风险最低复杂核心业务

6.2 监控三支柱

flowchart LR
    subgraph 指标["📊 指标 Metrics"]
        M1["Prometheus<br/>时间序列数据"]
    end
    subgraph 日志["📝 日志 Logs"]
        L1["ELK/Loki<br/>文本日志"]
    end
    subgraph 链路["🔗 链路 Tracing"]
        T1["Jaeger<br/>调用链追踪"]
    end
    
    style M1 fill:#e3f2fd
    style L1 fill:#fff3e0
    style T1 fill:#e8f5e9

核心规律:可观测性 = 指标 + 日志 + 链路追踪。三者缺一不可。


七、本章总结

核心规律:先设计再编码,测试先行,持续交付。流程不是束缚,而是质量的保障。

关键记忆点

  • ✅ 需求→设计→编码→测试→部署→监控是闭环
  • ✅ 测试金字塔:70%单元 + 20%集成 + 10%E2E
  • ✅ YAGNI原则:不要提前实现不需要的功能
  • ✅ 监控三支柱:指标 + 日志 + 链路追踪

延伸阅读