基本类型偏执(Primitive Obsession)
●症状和特点
对于一些简单的工作(比如货币,取值范围,电话号码这样的特殊字符串),使用基本类型而不去使用小的对象去解决。
使用常量来表示一些代码信息。(比如使用常量USER_ADMIN_ROLE = 1来表示用户的管理权限)
在数据数组中,使用字符串常量来作为数组的下标名称。
●问题产生的原因
和代码中的其它味道一样,对于基本类型的过度使用常常发生在程序员意识不够坚定时。“就只使用一小块地方来存储一些数据“,程序员说。创建一块基本类型的区域比新建一整个类容易很多,对吧?就像这样,另一块基本类型的区域就像这样产生了。看吧,代码也就变得臃肿且笨拙。
基本数据类型通常用来模拟某些特征。对于某些实例来说,需要模拟的不是某一个单独的数据类型,而是一系列的数字或者字符串组成的列表。一系列有着通俗易懂的名字的变量就用来表示这些数字或者字符串了,这也就是为什么这种情况变得非常普遍的原因了。
另一种情况是为了模拟一段区域。比如类中包含了一大组数据,类中定义的字符串常量也就作为数组的下标来表示这些数据了。
●解决方法
如果你有很多各种各样的基本数据类型,你可以将他们按照逻辑组织在一起,形成专门的类。将和这些数据相关的行为方法也放到这个类中会更好。对于这种情况,尝试使用以对象来代替数据法。
如果这些基本数据类型使用在方法的参数中,可以使用引入参数对象法和维护整体对象法。
当复杂的数据用变量编码时,可以使用以类代替类型法,以子类代替类型法,以状态/策略代替类型法。
如果变量中含有数组,可以使用以对象代替数组法。
●优势
由于使用了对象代替了基本数据类型,代码变得更加灵活。
代码更具有可读性和条理性。对于特定的数据的操作被放在了相同的位置,而不是散落在各处。我们也不用再去猜测这些奇怪的变量代表着什么,为什么他们在数组中。
更容易找到重复的代码。