读C#代码整洁之道笔记04_重构C#代码识别代码坏味道

1.应用程序级别代码坏味道

1.1.布尔盲点

1.1.1.由于函数使用布尔值而导致的信息缺失

1.1.2.解决方案是将布尔替换为枚举类型

1.2.组合爆炸

1.2.1.不同的代码使用不同的参数组合来执行同一件事情的产物

1.2.2.解决方案使用泛型

1.3.人为复杂性

1.3.1.简单的架构复杂化

1.3.2.解决方案务必保持软件的简单易懂(Keep It Simple,Stupid,KISS)

1.4.数据泥团

1.4.1.相同的字段同时出现在不同的类和参数列表中时

1.4.1.1.说明系统中缺少类定义

1.4.2.识别并泛化缺失的类可以降低系统的复杂度

1.5.粉饰注释

1.5.1.注释中用优美的词句掩盖代码的缺点

1.6.重复代码

1.6.1.多次出现的代码

1.6.1.1.bug=技术债务=程序员支出

1.6.2.解决方案将这些代码添加到当前项目的可重用类并放置在类库中

1.6.3.解决方案2:面向方面编程(AOP)是另一种删除样板代码的方法

1.7.意图不明

1.7.1.他人无法轻易理解代码的意图

1.8.可变的变量

1.8.1.不同操作之间多次更改的变量

1.8.2.消除变量的可变性,使其值更易于预测

1.8.3.函数编程

1.8.3.1.LINQ

1.9.怪异的解决方案

1.9.1.源代码中解决同样问题的方案多种多样

1.9.1.1.源代码中解决同样问题的方案多种多样

1.9.1.2.没有制定统一标准而造成

1.9.1.3.程序员并没有意识到系统中已经存在解决方案

1.9.2.解决方案:不同的重复的解决方案编写新类,并将最整洁最高效的方式添加到类中

1.9.3.解决方案2:适配器模式来统一不同的系统接口

1.10.霰弹式修改

1.10.1.一种改动需要在多个类中进行修改

1.10.1.1.复杂的代码还会导致程序员认知负担过重

1.10.2.减少耦合可以使类更易于测试

1.10.3.将不属于类的代码移出到恰当的位置可以提高应用程序的可读性、可维护性与可扩展性

1.11.解决方案蔓延

1.11.1.一种职责在不同的方法、类甚至库中均被实现

1.11.2.单一职责转移到同一个类中

1.12.不可控的副作用

1.12.1.在产品中由于无法被质量保证过程发现而引起的问题

1.12.2.唯一的办法就是重构代码使其完全可测,并可以在调试期间查看变量的状态以确保程序的正确性。

2.类级别代码坏味道

2.1.过高的圈复杂度

2.1.1.大量的分支和循环

2.1.2.1~10

2.1.2.1.代码简单没有风险

2.1.3.11~20

2.1.3.1.较复杂,风险相对较低

2.1.4.21~50

2.1.4.1.引起注意,中等风险

2.1.5.超过50

2.1.5.1.风险高,必须重构

2.1.6.解决方案

2.1.6.1.使用工厂模式替换switch语句

2.1.6.2.改善if语句条件检测的可读性

2.1.6.3.LINQ语句替换循环

2.2.发散式变化

2.2.1.对代码进行一处更改,但是发现自己必须更改许多不相关的方法

2.2.2.原因

2.2.2.1.类结构不良造成

2.2.2.2.复制粘贴代码

2.2.2.3.利用基类和子类的关系实现继承

2.3.向下类型转换

2.3.1.将基类转换为它的一个子类

2.4.过度的字面量使用

2.4.1.将字面量保存在常量中

2.4.2.将字符串字面量放置在本地化资源文件中

2.5.依恋情结

2.5.1.当一个方法花费大量的时间处理类中的代码而非自身的代码

2.6.狎昵(xiá nì)关系

2.6.1.一个类若依赖另一个类的实现细节

2.6.2.类之间不应当相互依赖

2.6.3.类应当是自包含的

2.6.4.类之间应该尽可能少地互相了解彼此的底细

2.7.不恰当的暴露

2.7.1.类暴露了其内部细节

2.7.2.打破了面向对象编程的封装原则

2.8.巨大的类

2.8.1.务必令其尽可能小巧、整洁、易于阅读

2.9.冗赘类

2.9.1.一种并不包含什么有效操作的类

2.9.2.和其他包含相似意图的类合并

2.9.3.削减继承层次结构

2.9.3.1.理想的继承层次是1

2.9.4.非常小的类还可以考虑采用内联的处理方法

2.10.中间人类

2.10.1.仅将功能委托给其他对象

2.10.2.舍弃中间人直接和处理相应职责的类进行交互

2.10.3.将其与现有类合并

2.11.孤立的变量和常量类

2.11.1.使用一个独立的类来定义系统不同部分使用的变量和常量

2.11.2.丢失其上下文而无法表达任何实际含义

2.11.3.移动到使用它们的位置

2.12.基本类型偏执

2.12.1.使用常量作为字段名称

2.12.2.不恰当地使用常量保存信息

2.12.3.使用基本类型值而非使用对象

2.13.被拒绝的遗赠

2.13.1.一个类继承自另一个类,却没有使用其所有方法

2.13.2.考虑是否真的需要基类

2.14.夸夸其谈未来性

2.14.1.一个类的功能现在不需要,但是将来可能用到

2.14.2.死代码,应当将其删除

2.15.命令,而非询问

2.15.1.将数据和操作数据的方法绑定在一起

2.15.2.一个对象包含逻辑,并要求其他包含数据的对象提供数据以供其执行操作,则应当将逻辑与数据合并到一个类中

2.16.临时字段

2.16.1.不需要在对象的整个生命周期内存在的成员变量

2.16.2.将临时字段及操作这些字段的方法移动到它们自己的类中

3.方法级别的代码坏味道

3.1.不合群的方法

3.1.1.一个类中和其他方法截然不同的方法

3.1.2.考虑该方法的目的

3.1.2.1.确定哪里才是该方法最合适的落脚点了

3.2.无用的代码

3.2.1.现存的方法无人使用

3.2.2.要识别无用的代码并将其删除

3.2.3.构造器、属性和变量也应遵循相同的原则

3.3.过多的返回数据

3.3.1.远超客户端的调用

3.4.过长或过短的标识符

3.4.1.标识符应当既能描述对象又简明扼要

3.5.过长的代码行

3.5.1.应尽量将其格式化,在点号和逗号处换行

3.6.过长的方法

3.6.1.方法应当只负责执行单一任务

3.7.参数过多

3.7.1.方法参数数目超过3个

3.8.过度耦合的消息链

3.8.1.当一个方法调用一个对象,继而调用另一个对象

3.8.2.消息链违反了迪米特法则

3.8.2.1.类只应当和离其最近的邻居通信

3.8.2.2.重构类,将所需的状态和行为放在距离其更近的位置

3.9.过高的圈复杂度

3.10.人为复杂性

3.11.依恋情结

3.12.狎昵关系

3.13.冗赘方法

3.14.中间人方法

3.15.怪异的解决方案

3.16.夸夸其谈未来性

3.17.参见前文

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容