- 1、本文档共50页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
代码的坏味道BadSmellsinCode
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 3.9 Primitive Obsession(基本型别偏执) 对象一个几句价值的东西是:它们模糊(甚至打破)了横亘于基本数据和体积较大的classes只见的界限。你可以轻松编写处一些与语言内置(基本)型别无异的小型classes。可以运用Replace DataValue with Object(175)将原本单独存在的数据值替换为对象。如果欲替换之数据值是type code (型别码),而它并不影响行为,可以运用Replace Type Code with Class(218)将它换掉。如果有相依于此type code的条件式,可运用Replace Type Code with Subclass(213)或Replace Type Code with State/Strategy(227)加以处理。如果有一组应该总是被放在一起的值域,可运用Extract Class(149);如果在参数列中看到基本型数据,不妨试试Introduce Parameter Object(295);如果正从array中挑选数据,可运用Replace Array with Object (186) 3.10 Switch Statement(switch惊悚现身) 面向对象程序的一个最明显特征就是:少用switch (或case)语句。从本质上说,switch语句的问题在于重复。常会发现同样的switch语句散步于不用地点。如果要为它添加一个新的case子句,逼促找到所有switch语句并修改它们。面向对象中的多态概念为此带来了解决办法。 3.10 Switch Statement(switch惊悚现身) 大多数时候,一看到switch语句就应该考虑以“多态”来替换它。应该使用Extract Method(110)将switch语句提炼到一个独立函数中,再以Move Method(142)将它搬移到需要多态性的那个class里。此时必须决定是否使用Replace Type Code with Subclasses(223)或Replace Type Code with State、Strategy(227)。一旦完成继承结构之后,就可以运用Replace Conditional with Polymorphism(255)了。 3.10 Switch Statement(switch惊悚现身) 如果只是在单一函数中有些选择事例,并不想改动它们,那么不必使用多态,Replace Parameter with Explicit Method(285)是个不错的选择。如果选择条件之一是null,可以试试Introduce Null Object(260) 3.11 Parallel Inheritance Hierarchies(平行继承体系) Parallel Inheritance Hierarchies其实是Shotgun Surgery的特殊情况。在这种情况下,每当你为某个class增加一个subclass,必须也为另一个class相应增加一个subclass。如果发现某个继承体系的class名称前缀和另一个继承体系的class名称前缀完全相同,便是闻到了这种坏味道。 3.11 Parallel Inheritance Hierarchies(平行继承体系) 消除这种重复兴的一般策略是:让一个继承体系的实体指涉(参考、引用、refer to )另一个继承体系的实体。如果再接再厉运用Move Method(142)和Move Field(146),就可以将指涉端(referring class)的继承体系消弭于无形。 3.12 Lazy Class(冗赘类) 你所创建的每一个class,都得有人去理解它、维护它,这些工作都是要花钱的。如果一个class的所得不值其身价,它就应该消失。项目中经常会出现这样的情况:某个class原本对得起自己的身价,但冲沟使它身形缩水,不再做那么多工作;或开发者事前规划了某些变化,并添加一个class来应付这些变化,但变化实际上没有发生。不论上述哪一种原因,都请让这个class庄严赴义。如果某些subclass没有做满足够工作,试试Collapse Hierarchy(344)。对于几乎没用的组件,应该以Inline Class(154)对付它们 3.13 Speculative Gen
文档评论(0)