
相关阅读:
300本计算机编程的经典书籍下载
WePhone开发者被逼自杀案续,在翟欣欣身上的各种消费清单明细及细节曝光
如果一段代码是不稳定或者有一些潜在问题的,那么代码往往会包含一些明显的痕迹。正如食物要腐坏之前,经常会发出一些异味一样。我们管这些痕迹叫做 代码异味 。
1重复代码 (Duplicated Code)
解决方案:
同一个class内的两个函数含有相同的表达式。——需要Extract Method,提炼出重复代码,然后让两个地点都调用被提炼出来的那一段代码。
两个互为兄弟的subclass内含相同的表达式,要避免这种情况——需要两个class都使用Extract Method,把Extract的Method推入superclass内。
两个毫不相干的classes内出现Duplicate Code,你应该考虑对其中一个使用Extract Class,将重复代码提炼到一个独立class中,然后在另一个class内使用这个新class。
2过长方法 (Long Method)
所谓 “ 好处 ”
解决方案:
3过大类 (Large Class)
解决方案:
4过长参数列表 (Long Parameter List)
会导致哪些问题
无用/开关/分类参数
难以理解
前后不一致,不易使用
经常需要修改
解决方案:
5发散式变化 (Divergent Change)
表现:一个类受到多种变化的影响
解决方案:
6散弹式修改 (Shotgun Surgery)
表现:一种变化引发多个类相应修改
解决方案:
7依恋情节 (Feature Envy)
表现:使用了大量其他类的成员
解决方案:
8数据泥团 (Data Clumps)
表现:常一起出现的一堆数据
解决方案:
9基本类型偏执 (Primitive Obsession)
解决方案:
反复出现的一组参数,抽象成类
有关联的多个数组,抽象成类
10switch惊悚现身 (Switch Statements)
解决方案:
11平等继承体系 (Parallel Inheritance Hierarchies)
表现:每当你为某个class增加一个subclass,必须也为另一个class相应增加一个subclass。
解决方案:
12冗余类 (Lazy Class)
解决方案:
13夸夸其谈未来 (Speculative Generality)
解决方案:
14临时字段 (Temporary Field)
解决方案:
15过度耦合的消息链 (Message Chains)
表现:用户向一个对象索求另一个对象,然后再向后者索求另一个对象,然后再索求另一个对象……这就是Message Chain
解决方案:
16中间转手人 (Middle Man)
表现:某个类接口有一半的方法都委托给其它类
实质:委托的过度使用
解决方案:
17太亲密 (Inappropriate Intimacy)
表现:两个类彼此使用对方私有的成员或方法
解决方案:
18不同接口的相似类 (Alternative Classes with Different Interfaces)
解决方案:
19不完善的类库 (Incomplete Library Class)
解决方案:
20纯稚的数据类 (Data Class)
解决方案:
21被拒绝的遗赠 (Refused Bequest)
表现:父类里面方法很多,子类只用有限几个
实质:继承体系设计错误
解决方案:
22过多注释 (Comments)
解决方案:
看完本文有收获?请转发分享给更多人
欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。
本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。