优雅编程之这样重构代码,你就“正常”了(十八)

开心一笑

【老婆问老公:你喜欢玩水还是喜欢玩火?
老公:我喜欢玩火。
老婆:那以后,饭就由你来煮。
老公:不不不,我喜欢玩水。
老婆:那以后的碗就由你来洗。
老公:瞬间石化。…】

【男孩:我感动天,感动地,怎么感动………
女孩:你要是敢动我,我,我,我就打死你。
男孩:好好的一首情歌。……】

提出问题

项目开发中如何进行重构???

解决问题

励志图片

这是《重构 改善既有代码的设计》中第15章我觉得比较重要的知识点。事实上只要看第1章的例子,第24章个人建议可以略过,没什么用.

重构的第一步

每当我要进行重构的时候,第一个步骤永远是相同的。即建立一个可靠的测试环境。

分解和重组

代码块越小,代码的功能就越容易管理,代码的处理和移动也就越轻松。

首先,我得在代码里找出函数内的局部变量和参数。任何不会被修改的变量,都可以被我当成参数传入新的函数,至于会被修改的变量,就需要格外的小心。

正和一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解代码才是优秀的程序员。

去除临时变量

利用多态取代

何为重构:

名词:重构,对软件内部结构的一种调整,目的是在不改变,软件可观察行为的前提下,提高其可理解性,降低其修改成本。

动词:重构,使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。

两顶帽子

添加新功能以及重构。

添加新功能就添加新功能,先不要去重构,重构你就好好重构,先不要去添加新的功能。

为何重构

原因我就不说了,反正就他妈好。

何时重构

三次法则:第一次做某件事时只管去做,第二次做类似的事时会产生反感,但无论如何还是可以去做,第三次再做类似的事,你就应该重构。

  • 添加功能时重构
  • 修补错误时重构
  • 复审代码时重构

以下是一些坏代码味道:符合下面就该重构了

  • Duplicated Code(重复代码)

  • Long Method(过长函数)

  • Large Class(过大的类)

  • Long Parameter List(过长的参数列表)

  • Divergent Change(发散式变化):当你看着一个类说:如果新加入一个数据库,我必须修改这三个函数,如果新出现一种金融工具,我必须修改这四个函数。那么此时也许将这个对象分成两个会更好。

  • Shotgun Surgery(弹式修改):
    如果遇到哪种情况,你都必须在很多不同的类内作出,许多小修改。那就是坏的味道。这时候你需要把所有需要修改的代码放进同一个类。如果眼下没有合适的类可以安置这些代码,就创建一个。

  • Feature Envy(依恋情节)

函数对某个类的兴趣高过对自己所处类的兴趣,是时候考虑这个函数到底应该放在什么位置了。

对象技术的全部要点:这是一种将数据和对数据的操作行为包装在一起的技术。

最根本的原则是,将总是一起变化的东西放在一块。

数据和引用这些数据的行为总是一起变化的。

  • Data Clumps(数据泥团)

减少字段和参数的个数,当然可以去除一些坏味道。但更重要的是,一旦拥有新对象,你就有机会让程序散发出一种芳香。

  • Primitive Obsession(基本类型偏执)

将原本单独存在的数据值替换为对象,从而走出传统的洞窟,进入炙手可热的对象世界。

编写小对象,如表示范围的Range

  • Switch Statements(switch 惊悚现身)

面向对象程序的一个最明显特征:少用switch(或case)语句。

看到switch语句,就应该考虑以多态来替换它。

  • Parallel Inheritance Hierarchies(平行继承体系)

每当你为某个类添加一个子类,必须也为另一个类相应增加一个子类,大多数时候你会发现,某个继承体系的类名前缀和另一个继承体系的类名前缀完全相同。是时候分离,为两个继承体系了。

  • Lazy Class(冗赘类)

你所创建的每个类,都得有人去理解它,维护它,这些工作都是要花钱的。如果一个类的所得不值其所价,它就应该消失。

  • Speculative Generality(夸夸其谈未来性)

无用的抽象类,无用的预留参数。

  • Temporary Field(令人迷惑的暂时字段)

某个类的实例变量仅为某种特定情况来设,某个函数的参数,为了方便声明为某个类的成员,而仅仅在这一个函数中使用。

  • Message Chains(过度耦合的函数)

现一个对象请求另一个对象,在向后者请求另一个对象。

  • Middle Man(中间人)

你也许会看到某个类接口,有一半的函数都委托给其他类,这样就是过度运用。

无用的委托,过多的中间层。

  • Inappropriate Intimacy(钾昵关系)

类不要过度亲密,一个类过一关注另一个类的成员。

  • Alternative Classes with Different Interfaces(曲同工的类)

两个函数做同一件事,却有着不同的类名

  • Incomplete Library Class(不完美的类库)

  • Data Class(纯稚的数据类)

或许可以通过移动方法把和这个数据对相关的操作一过来。

  • Refused Bequest(被拒绝的遗赠)

  • Comments(过多的注释)

读书感悟

来自几米《月亮忘记了》

  • 每个人都有一个像月亮一样的爱人,因为这个爱人,我们拥有守护的能力。

  • 记住的,是不是永远不会消失? 我守护如泡沫般脆弱的梦境, 快乐才刚开始,悲伤却早已潜伏而来。

  • 生命中,不断地有得到和失落。于是,看不见的,看见了;遗忘的,记住了。
    生命中,不断地有人离开或进入。于是,看见的,看不见了;记住的,遗忘了。
    然而,看不见的,是不是就等于不存在?记住的,是不是就不会消失?

其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎转载,点赞,顶,欢迎留下宝贵的意见,多谢支持!

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

推荐阅读更多精彩内容

  • 《重构》读书笔记 总览 第一部分 第一章从实例程序出发,展示设计的缺陷,对其重构可以了解重构的过程和方法。 第二部...
    白桦叶阅读 2,371评论 2 5
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,391评论 25 707
  • 苏格拉底的两个学生,柏拉图和色诺芬都写过题为“会饮篇”的哲学著作。当然他们写的不是同一次“会饮”,这某种程度说明,...
    007号堂吉诃德阅读 181评论 1 1
  • 好友薄荷突然发来信息,说她要和C先生结婚了,我有点惊讶又觉得意料之中。我回过去,“终于要把自己嫁出去了啊,我当伴娘...
    秋小晨阅读 387评论 6 1
  • 沈阳,作为全国大型城市之一,也是东北经济最繁荣的地区!2017年1月5日上午11:30左右,乘坐西部航空PN267...
    辣椒酱紫阅读 154评论 0 0