当前位置:网站首页>IEDA refactor的用法
IEDA refactor的用法
2022-07-02 18:13:00 【thoughtCodes】
IEDA refactor的用法
- 目录
- 概述
- 设计思路
- 实现思路分析
- 1.Refacot this
- 2.rename
- 3.rename file
- 4.change sinnature
- 5.Edit pro value
- 5.Type m
- 5.make static
- 6.convert to instance method
- 7.move class/member
- 8.copy class
- 9.safe delete
- 6.Extract
- inline super class
- Invert bolean
- find and repalce duliate:
- pull up member:
- pull down member:
- user inteface:
- inherit from replace
- remove middlman
- wrap method return value
- encapsulate Fields:
- replace temp with query
- replace constrct with factory
- replace constructor with build
- genirity
- migrate
- interliatelize
- migrate to anroidRx
- 使用顺序和方法
- 拓展实现
- 性能参数测试:
- 参考资料和推荐阅读
Survive by day and develop by night.
talk is cheap, show me the code,make a better result.
目录

概述
一直想写个这个用法,之前也用过,只是用了一部分,现在概述一下,当我们按照业务需求写好对应的代码时,这点是非常重要的。
需求:
设计思路
实现思路分析
1.Refacot this
选择对象,右键弹出建议列表,选择重构即可。
2.rename
这个比较简单,使用命名规范,重命名即可。
3.rename file
在当前选中文件重命名即可
4.change sinnature
通常是改动方法,改变方法参数。
5.Edit pro value
改变属性数值,目录对象没有,可能是pro文件有
5.Type m
类型相关
5.make static
操作对象,目录没有,方法对象有,应该是将方法变成static 的。
6.convert to instance method
将方法转成static 的,和5有什么区别呢?
7.move class/member
移动类的目录结构的
8.copy class
将文件copy到指定的目录,本地目录失败。
9.safe delete
这个比较简单,安全删除,文件待待删除文件不存在了。
6.Extract
variable
目前选择文件失败,选择的应该是表达式:
抽取表达式为常量:
constant

Filed
选择变量,属性名失败,同理选择的是一个表达式:
但是注意的是这个IEDA没有自动的将逻辑抽进去,就是将表达式作为一个成员变量处理了。
paraeter
选择单一变量名称或函数列表失败。应该选择的是表达式:
选择前:
重构后:
但是IEDA在逻辑上也没有对应的工程抽取。
object
选择单一变量名称或函数列表失败。
method:

选择具体的方法内的代码行,抽取方法:
Type parameter
选择方法列表无效。
Method object

将调用方法变成内部类和匿名类:
delegate

通常是生成一个新类,作为委派对象。由委派对象调用。
interface:

结果:
super class
先选择:
结果:
将抽取int 属性和增加对应的extends 类:
inline super class
选择父类:经过分析引用之后:
结果:
Invert bolean
暂时还不知道
find and repalce duliate:

pull up member:
pull down member:
选择对应的父类,抽取
user inteface:
选择使用的方法,进行分析,可以使用接口代替
inherit from replace

生成一个委派类,在内部的实现了一个接口。
remove middlman
服务类完全变成了“中间人”,此时你就应该让客户直接调用受托类。
wrap method return value
封装方法
encapsulate Fields:

replace temp with query
用查询取代临时结果
replace constrct with factory
用工厂方法取代构造方法,
选择方法行: 
replace constructor with build
用builder模式构造构造方法:
genirity
java 中的泛型,这个资料很少
migrate
迁移,一般提供了javaex,junit,swing的迁移选项:
interliatelize
在线的
migrate to anroidRx
迁移到对应的androidRx:
以上从基本的对象出发大概就这么多,针对不同的对象出现的菜单也不是一样。
使用顺序和方法
如下从粒度的角度,看下:
主要是
1.varibale,constant,filed等操作
2.function 内部的级别,主要是抽取参数,对象等。
3.选择多行的就是method,或method对象(作为匿名类,内部类处理)
其实也是抽取菜单的不同。
接着就是基于class文件级别的重构:
对单类来说:
1.删除,移动,删除等
2.较为更高的级别:重命名等。
这部分可以有操作系统管理,也仅是提供了另一个编辑入口。
多类来说:设计角度来说:通常是3个:
delagate,interface,superclass,
首先选择的对象有extends,impl 关键字等,这部分才能实现
对于一个成熟项目来说,实际来书extends好像用的多一下。
对于其关系展开的。
接着就是一些pattern的应用了最佳实践了。
如builder,factorypattern.会生成一个builder文件和调用文件。
接着就是class lib 级别的了,
无非就是jar 迁移,class 泛型:
以上对Java开发基本够了,
如果还有那就是系统间文件转换了如:
转成迁移到androidX文件。
至此分析完毕。
拓展实现
- 入门级实现:
- 部分源码实现.
- 源码实现
理论提供了依据。一般优化到pattern 层就差不多了。
性能参数测试:
无
参考资料和推荐阅读
欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~
边栏推荐
- QT中的QPropertyAnimation使用和toast案列
- 【测试开发】软件测试—概念篇
- How can retail enterprises open the second growth curve under the full link digital transformation
- 【ERP软件】ERP体系二次开发有哪些危险?
- Talk about the design of red envelope activities in e-commerce system
- mybatiesHelperPro工具必须的可以生成到对应项目文件夹下
- SIFT特征点提取「建议收藏」
- Kubernetes three open interfaces first sight
- Imitation Jingdong magnifying glass effect (pink teacher version)
- [test development] software testing - concept
猜你喜欢

Novice must see, click two buttons to switch to different content

LightGroupButton* sender = static_ cast<LightGroupButton*>(QObject::sender());

In pytorch function__ call__ And forward functions

教程篇(5.0) 10. 故障排除 * FortiEDR * Fortinet 網絡安全專家 NSE 5

Mysql高级篇学习总结7:Mysql数据结构-Hash索引、AVL树、B树、B+树的对比

机器学习笔记 - 时间序列预测研究:法国香槟的月销量

教程篇(5.0) 10. 故障排除 * FortiEDR * Fortinet 网络安全专家 NSE 5

Tutoriel (5.0) 10. Dépannage * fortiedr * fortinet Network Security expert NSE 5

Compile oglpg-9th-edition source code with clion

High frequency interview questions
随机推荐
高频面试题
[100 cases of JVM tuning practice] 03 -- four cases of JVM heap tuning
Talk about the design of red envelope activities in e-commerce system
聊聊电商系统中红包活动设计
[test development] software testing - concept
医院在线问诊源码 医院视频问诊源码 医院小程序源码
Yunna | why use the fixed asset management system and how to enable it
C文件输入操作
Excel查找一列中的相同值,删除该行或替换为空值
Yolov3 trains its own data set to generate train txt
Learning summary of MySQL advanced 6: concept and understanding of index, detailed explanation of b+ tree generation process, comparison between MyISAM and InnoDB
Deep learning mathematics foundation
数据降维——因子分析
【JVM调优实战100例】03——JVM堆调优四例
移动机器人路径规划:人工势场法[通俗易懂]
【测试开发】软件测试—概念篇
R language ggplot2 visual Facet: gganimate package is based on Transition_ Time function to create dynamic scatter animation (GIF)
Kubernetes three open interfaces first sight
R语言使用epiDisplay包的lsNoFunction函数列出当前空间中的所有对象、除了用户自定义的函数对象
R语言使用epiDisplay包的cox.display函数获取cox回归模型汇总统计信息(风险率HR、调整风险率及其置信区间、模型系数的t检验的p值、Wald检验的p值和似然比检验的p值)、汇总统计