📚类
🏗 类设计基本原则
-
单一职责原则 (SRP)
- 一个类只应有一个修改理由
- 检测方法:能用25个单词以内描述类的职责
-
内聚性
// 低内聚 - 处理多种事务 class UserService { void login() {} void sendEmail() {} void generateReport() {} } // 高内聚 - 拆分职责 class UserAuth { void login() {} } class EmailService { void sendEmail() {} }
📏 类结构规范
代码量控制
- 方法数量 ≤ 20个(建议)
- 行数 ≤ 500行(建议)
排列顺序
- 公共静态常量
- 私有静态变量
- 私有实例变量
- 公共方法
- 私有方法(紧挨在使用它的公有方法后)
🔄 消除重复代码的层级
- 方法级重复 → 提取方法
- 类级重复 → 提取基类/工具类
- 系统级重复 → 建立独立服务
🚨 类设计坏味道
| 症状 | 解决方法 | 页码 |
|---|---|---|
| 超大类 | 按职责拆分 | P168 |
| 特征依恋 | 方法迁移到正确类 | P172 |
| 数据泥团 | 封装成独立对象 | P175 |
⚙️ 实战技巧
Builder模式应用
# 代替多参数构造器
class ConnectionConfig:
def __init__(self, builder):
self.timeout = builder.timeout
self.retries = builder.retries
class Builder:
def __init__(self):
self.timeout = 30
self.retries = 3
def with_timeout(self, timeout):
self.timeout = timeout
return self
📌 关键引用
"类的第一个原则是短小,第二个原则是更短小" "好的类应该像一篇组织良好的文章,有明确的段落结构"
🔗 扩展工具
- Java: Checkstyle(类复杂度检测)
- Python: pylint(R0903检测过大类)
- TypeScript: ESLint(max-classes-per-file)