【代码重构(Refectoring)系列教程】基本型别偏执(Primitive Obsession)
基本类型偏执(Primitive Obsession)
●症状和特点
对于一些简单的工作(比如货币,取值范围,电话号码这样的特殊字符串),使用基本类型而不去使用小的对象去解决。
使用常量来表示一些代码信息。(比如使用常量USER_ADMIN_ROLE = 1来表示用户的管理权限)
在数据数组中,使用字符串常量来作为数组的下标名称。
●问题产生的原因
和代码中的其它味道一样,对于基本类型的过度使用常常发生在程序员意识不够坚定时。“就只使用一小块地方来存储一些数据“,程序员说。创建一块基本类型的区域比新建一整个类容易很多,对吧?就像这样,另一块基本类型的区域就像这样产生了。看吧,代码也就变得臃肿且笨拙。
基本数据类型通常用来模拟某些特征。对于某些实例来说,需要模拟的不是某一个单独的数据类型,而是一系列的数字或者字符串组成的列表。一系列有着通俗易懂的名字的变量就用来表示这些数字或者字符串了,这也就是为什么这种情况变得非常普遍的原因了。
另一种情况是为了模拟一段区域。比如类中包含了一大组数据,类中定义的字符串常量也就作为数组的下标来表示这些数据了。
●解决方法
如果你有很多各种各样的基本数据类型,你可以将他们按照逻辑组织在一起,形成专门的类。将和这些数据相关的行为方法也放到这个类中会更好。对于这种情况,尝试使用以对象来代替数据法。
如果这些基本数据类型使用在方法的参数中,可以使用引入参数对象法和维护整体对象法。
当复杂的数据用变量编码时,可以使用以类代替类型法,以子类代替类型法,以状态/策略代替类型法。
如果变量中含有数组,可以使用以对象代替数组法。
●优势
由于使用了对象代替了基本数据类型,代码变得更加灵活。
代码更具有可读性和条理性。对于特定的数据的操作被放在了相同的位置,而不是散落在各处。我们也不用再去猜测这些奇怪的变量代表着什么,为什么他们在数组中。
更容易找到重复的代码。
【代码重构(Refectoring)系列教程】基本型别偏执(Primitive Obsession)相关推荐
- WebRTC实时通信系列教程8 打通P2P连接和信令通信
[转载请注明出处: http://blog.csdn.net/leytton/article/details/76836265] PS:如果本文对您有帮助,请点个赞让我知道哦~ <WebRTC ...
- WebRTC实时通信系列教程9 数据通道图片传输
[转载请注明出处: http://blog.csdn.net/leytton/article/details/76838194] PS:如果本文对您有帮助,请点个赞让我知道哦~ <WebRTC ...
- 【代码重构(Refectoring)系列教程 基本概念二】何时应该重构?如何去重构?
何时去重构 三步原则 当你第一次开发某个模块时,你只是将它完成了. 当你第二次开发某个相似的内容时,尽管你对重复感到厌烦,但你还是要去做相同的工作. 当你第三次开始做这件事时,你就应该 ...
- OpenCV学习系列教程第五篇:测试和提高代码的效率
Opencv-Python学习系列教程第五篇 来自opencv-python官方学习文档,本人谨做翻译和注释,以及一些自己的理解 本文由作者翻译并进行代码验证,转载请注明出处~ 官方文档请参阅:htt ...
- stm32cubemx生成不了keil工程文件_STM32CubeMX系列教程03_创建并生成代码工程
说明: 本文原创作者『strongerHuang』 首发于微信公众号『嵌入式专栏』,同时也更新在我的个人网站:EmbeddedDevelop 标签:STM32. STM32CubeMX. LL库. H ...
- n 如何编写html,webpack4系列教程,如何编写plugin处理html代码逻辑?
本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规.大家都是程序员,不要闹得不开心. 在上一篇文章中,利用不同位置的publicPath,对html中的cdn地址,进行了处理.但是,遗留了一个小问 ...
- code blocks代码性能分析_Julia系列教程13--如果写出高性能的Julia代码
避免全局变量https://www.zhihu.com/video/1113506985873588224 code generationhttps://www.zhihu.com/video/111 ...
- 2020年 IOS 逆向 反编译 注入修改游戏或APP的调用参数新手系列教程——使用theos tweak 注入hook修改游戏执行代码上传动态头像
2020年 IOS 逆向 反编译 注入修改游戏或APP的调用参数新手系列教程--使用theos tweak 注入hook修改游戏执行代码上传动态头像 开篇 需求&最终效果 环境要求与即将使用的 ...
- android studio代码教程,史上最详细的Android Studio系列教程三
Android Studio 1.0正式版发布啦 今天是个大日子,Android Studio 1.0 终于发布了正式版, 这对于Android开发者来说简直是喜大普奔的大消息啊,那么就果断来下载使用 ...
- 无码系列5.1 代码重构 消除重复代码
1 前言 本文可以视为对ThoughtWorks高级顾问yuanyingjie关于"正交四原则"策略"消除重复"的"个人解读". 如有谬误, ...
最新文章
- 什么命令看服务器系统,查看linux系统版本可以使用什么命令_网站服务器运行维护...
- Android智能指针
- 常用工具类系列之DateUtil
- Visual Studio将原生支持WSL 2
- ASP.NET Core launchsettings.json文件(8)《从零开始学ASP.NET CORE MVC》:
- iOS开发-Get请求,Post请求,同步请求和异步请求
- 【OSGI】Error osgi xx Invalid value for DynamicImport-Package dynamic.import.pack
- python脚本监控docker容器
- Bailian4130 踩方格【组合+打表】
- 逻辑回归(Logistic Regression)详解
- listview 分页加载
- js在ie下打开对话窗口的方式
- Coprime Triples——CodeChef - COPRIME3
- 京东2019春招商业分析试卷[题目整理]
- python关于类的通俗描述?
- 佛系计算机二级 第六弹
- 兄弟俩今年的年龄和是35岁,当哥哥像弟弟现在这样大时,弟弟的年龄恰好是哥哥年龄的一半,哥哥今年几岁?
- npm install 报错 check python checking for Python executable python2 in the PATH
- 一些关于【前端】学习资源(网站、视频、文章)收藏的网址
- java 反射(二)之提高反射的方法 setAccessible(true)