重构--Introduce Parameter Object
目录
1、Introduce Parameter Object概念
2、动机
3、案例
3.1、 实操
4、参考文献
1、Introduce Parameter Object概念
某个方法/函数的参数列表比较长或者容易发生变化,这个时候我们需要引入一个Data Class数据类来封装参数列表,这种重构手法就叫做Introduce Parameter Object(引入参数对象)。引入了
参数对象之后,参数列表就会比较稳定,当需要增加参数时,我们只需要在Data Class中增加对应的属性即可,方法签名不需要变更,客户端代码也就不需要发生比较大的变更,不会出现编译错误。
2、动机
场景1:某些参数总是很自然地同时出现。
有一个方法,参数列表当中,startDate与endDate总是会一起出现,并且经常要比较两者的大小,这个时候,我们可以设计一个Data Class并命名为DateRange,里面有startDate与endDate两个属性域,并提供startDate与endDate校验方法,这样就引入了DateRange这个参数对象。
场景2:方法参数列表过长。
刚开始,方法只有两、三个参数,后来为了实现这个方法的复用,需要增加新的参数,以实现功能的复用,再后来,因为同样的理由,这个方法一直在增加新的参数,以实现新的功能。这样就会直接导致,方法签名不稳定,导致客户端代码需要进行相应的变更,当该方法的引用点比较多,这就会发生散弹性修改,是一个灾难。为了解决这个问题,我们可以引入参数对象,每当要增加新的参数扩展方法功能时,我们只需要在参数对象中,加入对应的属性即可,客户端代码也比较稳定。
3、案例
现在有一个方法public void run(String tableName) ,我们目前有这么一个需求,需要传入另外一个参数tablesName(原始多表名字符串),这个时候,我们使用Introduce Parameter Objecct重构手法来引入参数对象。
3.1、 实操
选中方法中的参数名称tableName,并使用快捷键打开"Introduce Parameter Objecct"窗口
点击“确认”之后
现在,我们加一个参数tablesName就非常简单了,只需要在RunParameter增加一个属性tablesName即可,并重载构造器,参数对象一般设计为不可变的
4、参考文献
重构--Introduce Parameter Object相关推荐
- 重构指南 - 引入参数对象(Introduce Parameter Object)
当一个方法的参数超过3个以上,就可以考虑将参数封装成一个对象.将参数封装成对象后提高了代码的可读性,并且该参数对象也可以供多个方法调用,以后如果增加删除参数,方法本身不需要修改,只需要修改参数对象就可 ...
- Introduce Parameter Object(引入参数对象)
某些参数总是很自然地同时出现 重构:以一个对象取代这些参数
- Introduce Parameter Object (引入参数对象)
使用场景: 某些参数总是很自然地同时出现. 使用方法: 以一个对象取代这些参数. //重构前 package 第十章;import java.util.Date; import java.util.E ...
- Introduce Null Object(引入Null对象)
Introduce Null Object(引入Null对象) 你需要再三检查某对象是否为null. 将null值替换为null对象. if (customer == null) plan = Bil ...
- Introduce Null Object
今天继续总结<重构>这本书中的一个重构手法,Introduce Null Object.写这个手法是因为它确实很巧妙,在实际编程中经常会遇到这种情况,前人总结出来了这么一个经典的手法,当然 ...
- Cause: java.sql.SQLException: Invalid parameter object type. Expected 'com.jd.sns.biz.api.domain.Plu
java.sql.SQLException: Invalid parameter object type. Expected 'java.util.Map' but found 'java.lang. ...
- ORACLE 12C 插入数据遇到 Error getting generated key or setting result to parameter object错误
今天用springboot和oracle的时候遇到以前的老项目保存数据的时候显示报错 Error getting generated key or setting result to paramete ...
- Error selecting key or setting result to parameter object. Cause: java.sql.SQLSyntaxErrorException
## 通用mapper insertSelective方法报语法错误 报错信息如下 Caused by: java.sql.SQLSyntaxErrorException: You have an e ...
- Error selecting key or setting result to parameter object.
Error selecting key or setting result to parameter object. :选择键或将结果设置为参数对象时出错. 'LAST_INSERT_ID' is n ...
最新文章
- tornado压力测试
- html常用标签6-表单标签
- [CUDA OpenCV]GPU加速的计算机视觉学习资源下载
- springboot搞定全局自定义异常
- android中json解析及使用 (下)
- UESTC_神秘绑架案 CDOJ 881
- ORACLE WebLogic Server 安装部署
- 电路中各种地,数字地DGND、模拟地AGND、功率地PGND、电源地GND、交流地AGND、大地EGND的区别及处理
- Scrapy 爬取阳光热线问政平台存储为json 文件(使用 CrawlSpider)
- 台式计算机和台式机,台式电脑i5和i7的区别_台式机i5和i7的区别有多大
- Python打包为exe文件
- 1,标准差的计算 2,标准分数z-score
- 大话操作系统(11)进程间通信
- android 模拟器目录,Android 获取APP 文件目录 模拟器检测
- 构建基于词典的Lucene分类器
- 声称AI存在意识,谷歌工程师遭解雇:违反保密协议
- 【Linux】Linux操作的一些基本指令
- centos7限制cpu使用_CentOS7中CPU频率调整问题
- 图灵社区 : 阅读 : 十年码农聚会报道——让高龄老码农social起来
- echarts 省市区县地图展示
热门文章
- Dadroit JSON Viewer 查看json文件的利器
- 【生活感悟】达克效应--要自信不要自负,越努力越幸运
- 用微信扫一扫功能扫描二维码下载安装APK不能用,不能打开APK下载链接的解决方案
- 小程序实现轨迹回放代码
- 交通信息服务器图片,交通标志图片大全(图文解释)
- 顺丰控股2019财报解读
- 12C安装oracle,Oracle 12C安装
- JAVA毕业设计健身房信息管理系统计算机源码+lw文档+系统+调试部署+数据库
- 微信小程序电子优惠券领取,淘宝客,微信小程序商城
- 计算理论基础-1-FA有穷自动机与Pumping_Lemma泵定理