《重构:改善既有代码的设计》—第1章1.1节起点

  • 时间:
  • 浏览:1
  • 来源:5分11选5官方_大发5分3D

你的态度跟我说倾向于尽量少修改程序:不管为什么么说,它还运行得很好。你心里牢牢记着那句古老的工程谚语:“但会 它没坏,就无须动它。”你这个程序跟我说还没坏掉,但它造成了伤害。它让我的生活比较难过,让我发现好难完成客户所需的修改。这刚刚,重构技术就该粉墨登场了。

Rental(租赁)

Rental表示某个顾客租了一部影片。

和任何立志要介绍“应用于真实世界中的有用技术”的人一样,我陷入了还还有一个 十分典型的两难困境。我不才能带引你看看怎么上能在还还有一个 我所取舍的小程序中进行重构,然而坦白说,那个程序的规模根本不值得朋友没办法 做。但会 但会 我让我看的代码是大系统的一累积,重构技术加快速度就变得重要起来。或多或少请你一边观赏你这个小例子,一边想象它身占据 还还有一个 大得多的系统。

我用了几只类来表现你这个例子中的元素。图1-1是一张UML类图,用以显示哪些地方地方类。

但会 ,面对你这个介绍性实例,我遇到了还还有一个 大疑问。但会 我取舍还还有一个 大型程序,没办法 对程序自身的描述和对整个重构过程的描述就太繁复了,任何读者有的是忍卒读(我试了一下,哪怕稍微繁复或多或少的例子刚刚超过5000页)。但会 我取舍还还有一个 容易理解的小程序,又恐怕看不在 重构的价值。

但但会 计费标准占据 变化,又会怎么上能?你需用一齐修改statement()和htmlStatement(),并确保两处修改的一致性。当你后续需用再修改时,基因重组粘贴带来的疑问就浮现出来了。让我编写的是还还有一个 永不需用修改的程序,没办法 剪剪贴贴就还好,但但会 程序要保存很长时间,但会 但会 需用修改,基因重组粘贴行为就会造成潜在的威胁。

即便没办法 ,你这个程序还是能正常工作。或多或少这或多或少美学意义上的判断,或多或少对丑陋代码的厌恶,是吗?但会 不去修改你这个系统,没办法 的确没办法 ,编译器才无需在乎代码好不好看呢。但会 当朋友打算修改系统的刚刚,就涉及了人,而人在乎哪些地方地方。差劲的系统是好难修改的,但会 好难找到修改点。但会 好难找到修改点,程序员就很有但会 犯错,从而引入bug。

让我发现自己需用为程序加进去去还还有一个 社会形态,而代码社会形态使你无法很方便地达成目的,那就先重构那个程序,使社会形态的加进去去比较容易进行,但会 再加进去去社会形态。

现在,第还还有一个变化来了:用户希望改变影片分类规则,但会 还没办法 决定为什么么改。朋友设想了几种方案,哪些地方地方方案刚刚影响顾客消费和常客积分点的计算法律最好的法子。作为还还有一个 经验丰沛 的开发者,让我肯定:不论用户提出哪些地方方案,你唯一才能获得的保证或多或少朋友刚刚在还还有一个月之内再次修改它。

对此起始程序的评价

你这个起始程序让我留下哪些地方印象?我会说它设计得不好,但会 很明显不符合面向对象精神。对于原来还还有一个 小程序,哪些地方地方缺点其实没哪些地方地方大不了的。快速而随性地设计还还有一个 简单的程序并没办法 错。但但会 这是繁复系统中具有代表性的一段,没办法 让我真的要对你这个程序信心动摇了。Customer里头那个长长的statement()做的事情其实过多了,它做了或多或少原来应该由或多或少类完成的事情。

Customer(顾客)

Customer类用来表示顾客。就像或多或少类一样,它也拥有数据和相应的访问函数:

为了应付分类规则和计费规则的变化,程序需用对statement()做出修改。但但会 朋友把statement()内的代码基因重组到用以打印HTML详单的函数中,就需用确保将来的任何修改在还还有一个 地方保持一致。随着各种规则变得没办法 繁复,适当的修改点没办法 难找,不犯错的但会 也没办法 少。

或多或少我决定从还还有一个 实例说起。在此过程中我将告诉你或多或少重构的道理,但会 让我对重构过程有或多或少感觉。但会 我才能向你展开通常的原理介绍。

在你这个例子里,朋友的用户希望对系统做或多或少修改。首先朋友希望以HTML格式输出详单,原来就可不需用直接在网页上显示,这非常符合时下的潮流。现在请你想一想,你这个变化会带来哪些地方影响。看看代码你就会发现,根本不但会 在打印HTML报表的函数中复用目前statement()的任何行为。你唯一可不需用做的或多或少编写还还有一个 全新的htmlStatement(),少量重复statement()的行为。当然,现在做你这个还不太费力,让我把statement()基因重组一份但会 按需用修改或多或少了。

图1-1 本例一开始英文 的各个类。此图只显示最重要的社会形态。图中所用符号是

本节书摘来自异步社区《重构:改善既有代码的设计》一书中的第1章,第1.节,作者【美】Martin Fowler,更多章节内容可不需用访问云栖社区“异步社区”公众号查看。

未标题-1 

Customer还提供了还还有一个 用于生成详单的函数,图1-2显示你这个函数带来的交互过程。完整篇 代码显示于下一页。

我会逐一列出哪些地方地方类的代码。

UML([Fowler,UML])

Movie(影片)

Movie或多或少还还有一个 简单的纯数据类。

1.1 起点

实例非常简单。这是还还有一个 影片出租店用的程序,计算每一位顾客的消费金额并打印详单。操作者告诉程序:顾客租了哪些地方影片、租期多长,程序便根据租赁时间和影片类型算出费用。影片分为三类:普通片、儿童片和新片。除了计算费用,需用为常客计算积分,积分会根据租片种类是是是否是是为新片而有不同。

第1章 重构,第还还有一个 案例

重构:改善既有代码的设计

我该从何说起呢?按照传统做法,一开始英文 介绍某个东西时,首先应该大致讲讲它的历史、主要原理等等。原来每当人们在会场上介绍哪些地方地方东西,一个劲诱发我的瞌睡虫。我的思绪开始英文 游荡,我的眼神开始英文 迷离,直到主讲人秀出实例,我才才能提起精神。实例其实可不需用拯救我于太虚之中,但会 它我你可不可不上能看见事情在真正进行。谈原理,很容易流于泛泛,又好难说明怎么上能实际应用。给出还还有一个 实例,就可不需用帮助我把事情认识清楚。