代码里的坏味道.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
脱节的API 症状: 为了灵活性而建立的细致、脱节的API,外加很多配置选项 措施: 同样的配置选项不断被重复使用时,引入网关用简化的方式和API交互 引入表达式构造器可同时作用于内部和外部API 不断重复的样板文件 症状: 重复的样板文件 措施: 提炼方法 太普遍的方法,引入类标注 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 重构之代码的坏味道 重复代码 症状: 重复的表达式 不同算法做相同的事 类似代码 措施: 一个类中包含两段重复代码时,使用提炼方法置于一处 两个相同层次的类含有重复代码时,提炼方法,方法上移 两个无关类中出现重复代码时,提炼方法至其中一个类或其他类中供调用 例:方法上移 class Customer { ??? private Date lastBillDate; ??? addBill(Date dat,double amount){} } class RegularCustomer:Customer { ??? createBill(Date){} ??? chargeFor(Date start,Date end){} } class PreferredCustomer:Customer { ??? createBill(Date){} ??? chargeFor(Date start,Date end){} } class Customer { ??? private Date lastBillDate; ??? addBill(Date dat,double amount){} ??? createBill(Date){} ??? abstract double chargeFor(Date start,Date end){} } class RegularCustomer:Customer { ??? chargeFor(Date start,Date end){} } class PreferredCustomer:Customer { ??? chargeFor(Date start,Date end){} } * 方法过长 症状: 存在大量的代码行 注释 条件和循环 措施: 每当需要注释时,写一个方法来代替注释 绝大多数场合下,采取提炼方法技术来缩短函数 方法带有很多参数和临时变量时,采取查询替换临时变量和链式调用替换临时变量来消除临时变量;采用引入参数对象和保留完整对象技术瘦身参数列表;重型武器:使用方法对象替换方法 使用分解条件语句处理条件表达式;使用集合闭包方法替换循环 例:查询替换临时变量 //这是未做重构的简单方法 double getPrice() { ??? int basePrice=_quantity*_itemPrice; ??? double discountFactor; ??? if(basePrice1000) ??????? discountFactor=0.95; ??? else ??????? discountFactor=0.98; ??? return basePrice*discountFactor; } //重构之后的主方法 double getPrice() { ??? return basePrice()*discountFactor(); } //把临时变量赋值语句等号右边的表达式提炼成一个方法 private int basePrice() { ??? return _quantity*_itemPrice; } //有了basePrice()的基础很容易提炼出下面的方法 private double discountFactor() { ??? if(basePrice()1000) ??????? return 0.95; ??? else ??????? return 0.98; } * 例:引入参数对象 class Entry... { ??? Entry(double value,Date chargeDate) ??? { ????????_value=value; ????????_chargeDate=chargeDate; ??? } ??? Date getDate() ??? { ????????return _chargeDate; ??? } ??? double getValue() ??? { ????????return _value; ??? } ??? private Date _chargeDate; ??? private double _value; } class Account... { ??? double

文档评论(0)

PPT精品 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档