第10章 简化函数调用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章 简化函数调用

第10章 简化函数调用 Rename method Add parameter Remove parameter Separate query from modifier 如果一个函数中同时包含了查询和修改类内部状态的动作,请将这两个动作分离 Parameterize method 两个或多个函数做着类似的工作,只是有几个值使得行为略有不同,通过参数来处理不同情况从而统一这几个函数,避免代码重复 Replace parameter with explicit method 有一个函数,其完全根据参数的不同而采取不同的行为,并且参数的取值是离散的。这时可以针对该参数的每一个值建立一个不同的函数 Preserve whole object 假如你从某一个对象中取出若干值,将他们作为某一次函数调用时的参数,这时可以考虑传递整个对象 Replace parameter with method 对象调用某个函数,将所得结果作为参数传递给另一个函数,而接受该参数的函数也有能力调用前一个函数。这时可以让参数接受者去掉该参数而直接调用前一个函数,这里体现了参数使用的一个原则:如果可以通过其他途径获取参数值,那么就不应该通过参数获取该值 Introduce parameter object 你常常会看到一组特定的参数总是一起被传递,可能有好几个函数都使用这几个参数,这几个函数可能属于同一个类,也可能属于不同的类,这样一组数据就是一个数据泥团,这时可以用一个类包装这一组数据,再用对象取代它们 Remove setting method 你类中的某个值域应该在对象初创时被赋值,然后就不再改变。这时应该将该值域设为常量,并移除该值域的所有设值函数 Hide method 有一个函数,从来没有被其他的类用到,这时可以将这个函数修改为私有的 Replace constructor with factory method Encapsulate downcast 某个函数返回的对象,需要由函数的调用者执行向下转型的动作,这时可以将向下转型的动作封装在函数中 Replace error code with exception Replace exception with test 面对一个调用者可以预先加以检查的条件,你却抛出了一个异常,这时你可以修改调用者让它在使用函数前先做检查并去掉异常 第三章 代码的坏味道 Duplicated code Long method Large class Long parameter list Divergent change 我们希望软件是容易修改的,一旦要修改,我们希望跳到系统的某一点,只在该处做修改。针对某一外部变化所引起的相应修改,都应只发生在一个类中。如果一个类有多种变化的原因,那么应该将其分解为多个类。 Shotgun surgery Divergent change 是一个类受多种变化的影响,而Shotgun surgery则是一个变化引起多个类的修改,这两种情况下你都应该整理代码,取得外界变化与待改类的一一对应关系 Feature envy 面向对象的全部要点在于:这是一种将数据和加诸于其上的操作包装在一起的技术。有一种经典的气味是:函数对某个class的兴趣高过对自己所处之host class的兴趣。这种倾慕之情的焦点便是数据。无数次经验里,我们看到某个函数为了计算某值,几乎从另一个对象那里调用了半打的取值函数。疗法显而易见:将这个函数移至另一地点 Data clumps 数据项(data item)就像小孩子,喜欢成群结队的在一起。这些总是绑在一起出现的数据,应该将它们放在属于它们自己的对象中 Primitive obsession 有时候应该引进一些和基本型别无异的小对象,比如电话号码、邮政编码、数组等,可用小对象包装它们 Switch statements 可用多态包装 Lazy class 将没用的class去掉 Temporary field 有时你会看到这样的对象:其内某个变量仅为某种特定情形而设。这样的代码不易让人理解,因为你通常认为对象在所有时候都需要它的所有变量。这时可以将这个变量和所有与它有关的代码都放进一个新类中 Message chains 消息链过长 Middle man 过度运用委托不如直接和责任对象打交道 Inappropriate intimacy 有时候你会看到两个类过于亲密,花太多时间去探究彼此的私有成分,如果这发生在两个人身上,我们不必做卫道士,但对于两个类,我们希望它们严守清规 Incomplete library class Comments 过多的注释:当你感觉需要写注释,请先使用重构,让这些注释变得多余 第六章 重新组织你的函数 1. Extract me

文档评论(0)

woai118doc + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档