《重构既有代码》PPT课件.ppt

上传人:牧羊曲112 文档编号:5651314 上传时间:2023-08-06 格式:PPT 页数:17 大小:285KB
返回 下载 相关 举报
《重构既有代码》PPT课件.ppt_第1页
第1页 / 共17页
《重构既有代码》PPT课件.ppt_第2页
第2页 / 共17页
《重构既有代码》PPT课件.ppt_第3页
第3页 / 共17页
《重构既有代码》PPT课件.ppt_第4页
第4页 / 共17页
《重构既有代码》PPT课件.ppt_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《《重构既有代码》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《重构既有代码》PPT课件.ppt(17页珍藏版)》请在三一办公上搜索。

1、坏味道,public int discount(int price)if(price 1000)price-=20;.return price;,public int discount(final int price)int ret=price;if(price 1000)ret-=20;.return ret;,传值参数不能用赋值,职责不明确,应用创建临时变量对其操作,坏味道,double temp=2*(_height+_width);System.out.println(temp);temp=_height*_width;System.out.println(temp);,double

2、perimeter=2*(_height+_width);System.out.println(perimeter);double area=_height*_width;System.out.println(area);,职责不明确,ColdRule*newRule=new ColdRule();newRule-SetOID(oldRule-GetOID();newRule-SetRegion(oldRule-GetRegion();newRule-SetRebateRuleID(oldRule-GetRebateRuleID();newRule-SetBeginCycle(oldRule-

3、GetBeginCycle()+1);newRule-SetEndCycle(oldRule-GetEndCycle();newRule-SetMainAcctAmount(oldRule-GetMainAcctAmount();newRule-SetGiftAcctAmount(oldRule-GetGiftAcctAmoun t();newRule-SetValidDays(0);newRule-SetGiftAcct(oldRule-GetGiftAcct();rules-Add(newRule);,ColdRule*CreateNewRule(ColdRule,引入解释性变量,bool

4、ean isMacOs=platform.toUpperCase().indexOf(MAC)-1;boolean isIEBrowser=browser.toUpperCase().indexOf(IE)-1;boolean wasResized=resize 0;if(isMacOs&isIEBrowser&wasInitialized()&wasResized)/do something,if(platform.toUpperCase().indexOf(MAC)-1)&(browser.toUpperCase().indexOf(IE)-1)&wasInitialized()&resi

5、ze 0)/do something,去除双重否定,if(!item.isNotFound(),if(item.isFound().,使用否定函数,if(item.isFound()=false),if(item.isNotFound().,自注释,void printOwing()/print bannerSystem.out.println(“*”);System.out.println(“Banner”);System.out.println(“*”);/print detailsSystem.out.println(name:+_name);System.out.println(amo

6、unt+getOutstanding();,void printOwing()printBanner();printDetails(getOutstanding();void printBanner()System.out.println(“*”);System.out.println(“Banner”);System.out.println(“*”);void printDetails(double outstanding)System.out.println(name:+_name);System.out.println(amount+outstanding);,避免重复使用宏,Strin

7、g getAddrString(DeviceKey deviceKey)String addr=null;/#ifdef SPRINT addr=deviceKey.getAddressAsString();/#else ATT addr=deviceKey.getNodeAsString();#endif return addr;,return_type fun()/#ifdef SPRINT./#else ATT./endif return;,interface ICarrier return_type fun1();.return_type funN();,class SprintCar

8、rier implements ICarrier class ATTCarrier implements ICarrier.,void init/#ifdef SPRINT carrier=new Sprintcarrier();/#else ATTcarrier=new ATTCarrier();/#endif,算法重复,String foundPerson(String people)for(int i=0;ipeople.length;i+)if(peoplei.equals(Don);return Don;if(peoplei.equals(Bin);return Bin;if(peo

9、plei.equals(Java);return Java;return“”;,List cadidates=Arrays.asList(new String Don,Bin,Java;for(int i=0;ipeople.length;i+)if(cadidates.contains(peoplei);return peoplei;return;,逻辑过于复杂,double getPayAmount()double result=0;if(isDead)result=deadAmount();elseif(isSeparated)result=sepratedAmount();elseif

10、(isRetired)result=retiredAmount();else result=normalAmount();return result;,if(isDead)return deadAmount();if(isSeparated)return sepratedAmount();if(isRetired)return retiredAmount();return normalAmount();,以多态取代条件式,double getSpeed()switch(type)case EUPOPEAN:return getBaseSpeed();case AFRICAN:return 0;

11、case AMERICAN:return 1;坏处:如果有增加新的条件判断,需要更新所有条件判断的地方改进:如果同一组条件式许多地方重复出现,考虑使用多态;,return_type fun()switch(type)case EUPOPEAN:.case AFRICAN:.case AMERICAN:.,Switch陷阱,switch(firstChar)case N:nextFirstChar=O;break;case O:nextFirstChar=P;break;case P:nextFirstChar=Q;break;case Q:nextFirstChar=R;break;case

12、R:nextFirstChar=S;break;case S:nextFirstChar=T;break;default:throw new IllegalArgument();,switch(firstChar)case N:case O:case P:case Q:case R:nextFirstChar=firstChar+1;break;default:throw new IllegalArgument();,if(firstChar=N,重构实践,public class Preference int xx=DEFAULT_VALUE;public setXX()public get

13、XX()public class PreferenceManager static Preference parms=new Preference();public static PreferenceManager getInstance()return instance;public Preference getPreference return parms;private PreferenceManager()/init preference setting,void main(.).if(PreferenceManager.getInstance().getPreference()!=n

14、ull)int x=PreferenceManager.getInstance().getPreference().getXX();.,重构实践,public class Preference int xx=DEFAULT_VALUE;public setXX(.)public getXX()public class PreferenceManager Preference parms=new Preference();public static PreferenceManager getInstance()return instance;private PreferenceManager p

15、arms=new Preference();public setXX(.)public getXX(),void main(.).int x=PreferenceManager.getInstance().getXX();.,何时重构 三次法则,第一次做某件事时只管去做;第二次做类似的事会产生反感,但无论如何还是做了;第三次再做类似的事,你就应该重构。何时不该重构?现有代码根本不能正常工作。如果项目已近最后期限,你也应该避免重构。,项目实践,何时做大规模重构?如何避免过多的Regression?重构VS已有Unit Test Code,主要参考:Martin Fowlers Refactoring谢谢,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号