首页 > 编程知识 正文

下列代码使用了哪种重构方法,代码重构流程

时间:2023-05-06 18:53:56 阅读:173350 作者:413

代码重构技巧参考网址

3359 MP.weixin.QQ.com/s/1-tn5 ymqimqojxlfchuy 1a

作者语录

这次,抛开JAVA虚拟机的源代码这个比较基础的东西,给大家介绍一下美丽的西洋牛代码重构的一些诀窍吧。 这些内容一部分来自书籍,一部分来自美丽的西方牛维护项目的实践经验。 如果猴子伙伴们用过这个手法,可以加入文章消息,和别人分享你的小心,小小的体验,也可以给你带来一个美丽的西洋牛自己定义的排行榜。 美丽的西洋牛不受欢迎。

1 .提取重复代码classbadexample { public void some method1(} (/code system.out.println ) '重复代码'); /*重复代码块*///code } public void someMethod2() { //code System.out.println ) '重复代码); /*代码块-----/code }/-------------------------/class//code }公共voublic vode //code } public void someMethod3() { System.out.println (重复代码) }; /*重复代码块*/}2.拆分冗馀方法classbadexample { public void some method ()//function(1)//function(1)//function ) 函数3 (; } private void function 11 (((/function [1] ) } private void function1) )//function) } private void function1)=null(if ) b!=null ) {/code [1] } else {/code [3] } else {//code [2] }/----------------else classgoodexample { public void some method (objecta,Object B ) if ) a==null ) { //code[2] return; (if ) b==null ) { //code[3] return; } //code[1] }} 4.优化嵌套条件分支(2) classbadexample )公共void some method (objecta,Object B ) if ) a!=null(if ) b!=null((/code ) () )、分隔线(-------- )、cll=null B!=null}{/code}}5.一次性临时变量class BadExample { private int i; p

ublic int someMethod(){ int temp = getVariable(); return temp * 100; } public int getVariable(){ return i; }}/* ---------------------分割线---------------------- */class GoodExample { private int i; public int someMethod(){ return getVariable() * 100; } public int getVariable(){ return i; }} 6.消除过长参数列表 class BadExample { public void someMethod(int i,int j,int k,int l,int m,int n){ //code }}/* ---------------------分割线---------------------- */class GoodExample { public void someMethod(Data data){ //code }}class Data{ private int i; private int j; private int k; private int l; private int m; private int n; //getter&&setter} 7.提取类或继承体系中的常量 class BadExample { public void someMethod1(){ send("您的操作已成功!"); } public void someMethod2(){ send("您的操作已成功!"); } public void someMethod3(){ send("您的操作已成功!"); } private void send(String message){ //code }}/* ---------------------分割线---------------------- */class GoodExample { protected static final String SUCCESS_MESSAGE = "您的操作已成功!"; public void someMethod1(){ send(SUCCESS_MESSAGE); } public void someMethod2(){ send(SUCCESS_MESSAGE); } public void someMethod3(){ send(SUCCESS_MESSAGE); } private void send(String message){ //code }} 8.让类提供应该提供的方法 class BadExample { public int someMethod(Data data){ int i = data.getI(); int j = data.getJ(); int k = data.getK(); return i * j * k; } public static class Data{ private int i; private int j; private int k; public Data(int i, int j, int k) { super(); this.i = i; this.j = j; this.k = k; } public int getI() { return i; } public int getJ() { return j; } public int getK() { return k; } }}/* ---------------------分割线---------------------- */class GoodExample { public int someMethod(Data data){ return data.getResult(); } public static class Data{ private int i; private int j; private int k; public Data(int i, int j, int k) { super(); this.i = i; this.j = j; this.k = k; } public int getI() { return i; } public int getJ() { return j; } public int getK() { return k; } public int getResult(){ return i * j * k; } }} 9.拆分冗长的类

这项技巧其实也是属于非常实用的一个技巧,只不过由于它的难度相对较高,因此被 优美的西牛 排在了后面。针对这个技巧,优美的西牛 很难像上面的技巧一样,给出一个即简单又很容易说明问题的小例子,因为它已经不仅仅是小手段了。

大部分时候,我们拆分一个类的关注点应该主要集中在类的属性上面。拆分出来的两批属性应该在逻辑上是可以分离的,并且在代码当中,这两批属性的使用也都分别集中于某一些方法当中。如果实在有一些属性同时存在于拆分后的两批方法内部,那么可以通过参数传递的方式解决这种依赖。

类的拆分是一个相对较大的工程,毕竟一个大类往往在程序中已经被很多类所使用着,因此这项重构的难度相当之大,一定要谨慎,并做好足够的测试。

10.提取继承体系中重复的属性与方法到父类

这项技巧大部分时候需要足够的判断力,很多时候,这其实是在向模板方法模式迈进的过程。它的实例 优美的西牛 这里无法给出,原因是因为它的小实例会毫无意义,无非就是子类有一样的属性或者方法,然后删除子类的重复属性或方法放到父类当中。

往往这一类重构都不会是小工程,因此这一项重构与第九种类似,都需要足够的谨慎与测试。而且需要在你足够确认,这些提取到父类中的属性或方法,应该是子类的共性的时候,才可以使用这项技巧。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。