基础类型沉迷
概述
基础类型沉迷是代码异味的一种,指过度使用基础数据类型(如字符串、整数等)来表示领域概念,而没有创建专门的对象来封装这些概念的含义和行为。
关键内容
- 特征识别:
- 用字符串表示特定概念(如邮箱、电话号码)
- 用整数表示特殊含义(如金额以分为单位)
- 使用基础类型数组而不是对象
- 用字符串常量表示类型码
-
大量使用魔法数字或魔法字符串
-
负面影响:
- 在类型层面缺乏验证机制
- 相关逻辑散落在整个代码库中
- 容易传递错误的值类型
- 缺少领域对象,不能封装相关行为
-
难以确保数据的一致性和有效性
-
重构策略:
- Replace Primitive with Object:将基础类型替换为对象
- Replace Type Code with Class:用类替换类型代码
- Replace Type Code with Subclasses:用子类替换类型代码
-
Replace Type Code with State/Strategy:用状态/策略模式替换类型代码
-
重构示例: ``` // 重构前:使用基础类型 const user = { email: 'john@example.com', // 只是字符串 phone: '1234567890', // 只是字符串 status: 'active', // 魔法字符串 balance: 10050 // 以分为单位的整数 };
// 重构后:使用专用对象 const user = { email: new Email('john@example.com'), phone: new PhoneNumber('1234567890'), status: UserStatus.ACTIVE, balance: Money.cents(10050) }; ```
来源
- Martin Fowler — 《重构:改善既有代码的设计》
- 代码异味 — 重构指导书
相关
- 代码异味 — 基础类型沉迷所属的异味类别
- 重构 — 解决方法
- 类型安全 — 相关概念
- 值对象 — 相关设计模式
- Replace Primitive with Object — 具体重构技巧