1 符号和症状
- 用原始类型代替小对象,用于简单任务(如货币、范围、用作电话号码的特别字符串,等等)。
- 使用常量编码信息(如使用常量
USER_ADMIN_ROLE=1
来指代具有管理员权限的用户)。 -
2 问题的根源
与其他代码坏味已有,原始强迫症来源于片刻的虚弱。不过是一个存储数据的字段:创建一个原始字段比创建一个全新的类简单多了。这样,加入了一个原始字段,然后需要另一个字段,也加入了。最终,类变得很大。
原始类型常用于模拟类型。不是使用单独的数据类型,而是用一组数值或者字符串,形成可用值或者某些实体的列表。这些数值和字符串通常成为常量,被赋予容易理解的名字,从而广泛传播。
另一种情况是字段模拟。类含有大量不同的数据,把字符串常量(特定于这个类)用作数组下标。3 治疗
如果有大量原始字段,可能应该把一些字段逻辑地组织到类中。如果把与这些字段相关的行为也移动到类中,就更好了。试试用对象代替数据值。
- 如果原始字段的值在方法参数中使用,试试引入参数对象,或者保存整个对象。
- 用变量编码复杂的数据时,试试用类替代类型编码、用子类替代类型编码、用状态/策略替代类型编码。
如果变量中有数组,试试用对象替代数组。
4 收益
使用对象替代原始类型,代码变得更灵活。
- 更容易理解和组织的代码。对特定数据的操作代码在同一个地方,而不是分散在多处。不必猜测为什么数组中有这么多奇怪的常量。
- 更容易发现重复的代码。