第3章 · 系统设计实践

架构设计原则 · 设计模式 · API规范 · 数据库范式

3.1 架构设计原则 (SOLID)

SOLID 是面向对象设计的五个基本原则,帮助构建可维护、可扩展的系统。

缩写原则核心思想
S单一职责一个类只负责一个功能领域
O开闭原则对扩展开放,对修改关闭
L里氏替换子类可替换父类且不破坏正确性
I接口隔离客户端不应依赖不需要的接口
D依赖反转依赖抽象而非具体实现
SOLID 原则 S 单一 O 开闭 L 里氏 I 接口 D 依赖 相互协同 · 低耦合高内聚

3.2 设计模式实战 (工厂 & 策略)

🔧 工厂模式

将对象创建逻辑封装,客户端通过工厂获取实例,符合开闭原则。

// 简单工厂示例 (Java风格)
public interface Payment {
    void pay(double amount);
}
public class Alipay implements Payment { ... }
public class WechatPay implements Payment { ... }
public class PaymentFactory {
    public static Payment create(String type) {
        if ("alipay".equals(type)) return new Alipay();
        else if ("wechat".equals(type)) return new WechatPay();
        throw new IllegalArgumentException();
    }
}

⚖️ 策略模式

定义一系列算法,将每个算法封装起来,使它们可以互相替换。

// 策略模式示意 (TypeScript)
interface DiscountStrategy {
    calculate(price: number): number;
}
class NoDiscount implements DiscountStrategy { ... }
class SeasonalDiscount implements DiscountStrategy { ... }
class Checkout {
    constructor(private strategy: DiscountStrategy) {}
    public compute(price: number) { return this.strategy.calculate(price); }
}
Context Strategy ConcreteA ConcreteB

3.3 API 设计规范

遵循 RESTful 风格,资源路径、HTTP 动词、状态码、版本管理等。

规范项推荐做法
URL 命名复数名词,如 /api/v1/users
HTTP 方法GET / POST / PUT / DELETE / PATCH
状态码200, 201, 204, 400, 401, 404, 500
版本控制URL 路径或请求头 Accept: vnd.example.v2+json
错误响应统一结构 { "error": { "code":..., "message":... } }
客户端 API网关 微服务 HTTP 路由

3.4 数据库设计范式

范式化减少数据冗余,提高数据完整性。常用三大范式。

  • 第一范式 (1NF):每列保持原子性,不可再分。
  • 第二范式 (2NF):满足1NF,且非主键列完全依赖于主键。
  • 第三范式 (3NF):满足2NF,且非主键列不传递依赖于主键。
范式核心要求典型反例
1NF字段不可再分割“地址”字段包含省市县
2NF消除部分依赖订单明细表依赖订单ID+商品ID
3NF消除传递依赖学生表依赖系ID,系名冗余
1NF 原子性 2NF 完全依赖 3NF 无传递