
重构
文章平均质量分 66
《重构-改善既有代码的设计》一书的总结性笔记
-Hermes-
Stay hungry, Stay foolish.
展开
-
Java编码规范,让你的代码赏心悦目--错误处理
先写try-catch-finally语句 从某种意义上try代码块就像是事务。catch代码块将程序维持在一种持续状态。在编写可能出现异常的语句时,最好先写这个try/catch代码块。这样可以事先划定一个范围。给出异常发生的环境说明 抛出的每个异常,都应当提供足够的环境说明,以便判断错误的来源和处所;应创建信息充分的错误信息,并和异常一起传递过去。在消息中,原创 2017-09-11 21:27:40 · 1348 阅读 · 0 评论 -
Java编码规范,让你的代码赏心悦目--类
类的组织 类应该从一组变量列表开始,如果有公共静态常量,应该先出现。然后是私有静态变量,以及私有实体变量。很少会有公共变量。公共函数应跟在变量列表之后。我们喜欢把由某个公共函数调用的私有工具函数紧随在公共函数后面。这符合自顶向下原则;类应该短小 类越短小越好!函数一般计算代码行数。对于类,采用不同的衡量方法。计算权责!类的名称应当描述其权责。类的命名是帮原创 2017-09-11 21:28:09 · 769 阅读 · 0 评论 -
Java编码规范,让你的代码赏心悦目--迭进
通过迭进设计达到整洁目的 简单设计的四条规则,以下规则按其重要程序排列:运行所有测试;不可重复;表达了程序员的意图;尽可能减少类和方法的数量;简单设计规则1:运行所有测试 全面测试并持续通过所有测试的系统,就是可测试的系统;紧耦合的代码难以编写测试。使用依赖注入,接口,和抽象来减少耦合;简单设计规则2~4:重构 有了测试,就能保原创 2017-09-11 21:28:21 · 1147 阅读 · 0 评论 -
Java编码规范,让你的代码赏心悦目--有意义的命名
名副其实 变量,函数,类的命名应该告诉我们它做什么事。如果需要注释来补充,就不算是名副其实。int d;//消逝的时间,以日计。名称d什么也没说明,要靠注释说明自身来看几个更好的例子:int elapsedTimeInDays;int daysSinceCreation;int daysSinceModification;int fileAgeInDays;避免误导原创 2017-09-05 22:17:34 · 1084 阅读 · 0 评论 -
Java编码规范,让你的代码赏心悦目--函数
短小 函数越短小越好!if,else,while,它们中的代码最好只有一行!最好是一个函数调用又因为函数名称具有说明意义,所以它们本质上又是一个不错的说明文档!只做一件事 函数应该只做一件事情!如何判断函数是否只做了一件事情:看该函数是否能再拆出一个函数,该函数不仅只是单纯地重新诠释其实现!每个函数一个抽象层级 自顶向下读代码:向下规则原创 2017-09-05 22:17:55 · 1981 阅读 · 0 评论 -
Java编码规范,让你的代码赏心悦目--格式
垂直格式 源代码该有多大?短文件通常比长文件易于理解;垂直方向上的靠近空白行隔开了概念,靠近的代码行则暗示了它们之间的紧密关系;这条规则不适用于分布在不同文件中的概念。除非有很好的理由,否则就不要把关系密切的概念放到不同的文件中。这也是避免使用protected变量的 理由之一。变量声明应尽可能靠近其使用位置。因为函数较短,本地变量应该在函数的顶部出原创 2017-09-05 22:18:13 · 756 阅读 · 0 评论 -
Java编码规范,让你的代码赏心悦目--对象和数据结构
数据,对象的反对称性 先来看一段过程式形状代码 此时给Geometry类添加一个primeter()函数,这些形状类根本不会因此而受影响。另一方面,如果添加一个新形状,就得修改Geometry中的所有函数来处理它再来看一段多态式形状 在这里,area()方法是多态的。不需要有Geometry类。如果添加一个新形状,现有的函数一个也不会受到影响,原创 2017-09-05 22:18:33 · 746 阅读 · 0 评论 -
重构--Replace Temp with Query(以查询取代临时变量)(六)
重构方式 你的程序以一个临时变量保存某一表达式的运算结果;将这个表达式提炼到一个独立函数中,将这个临时变量的所有引用点替换为对新函数的调用。此后,新函数就可被其他函数使用; 动机 临时变量的问题:只能存在于所属函数;会驱使函数变长,只有这样才能访问到需要的临时变量;Replace Temp with Query往往是在运用Extract原创 2017-08-22 21:42:07 · 755 阅读 · 1 评论 -
重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
Inline Method(内联函数) 如果一个函数的方法体与函数名称同样清楚易懂,那么在函数调用点插入函数本体,然后移除该函数: 动机情况一:有些函数,其内部代码和函数名称同样清晰易读。也许是你自己重构了该函数,导致出现这样的结果。那么此时就应该去掉这个函数,直接使用其中的代码。情况二:如果手上有一群组织不合理的函数。可以将它们都内联到一个大型函数中,再原创 2017-08-15 21:31:48 · 1877 阅读 · 0 评论 -
重构--Extract Method(提炼函数)(四)
重构方式 将下面的代码放进一个独立函数中,并让函数名称解释该函数的用途void printOwing(double amount){ printBanner();//print detailsSystem.out.println("name:"+_name); System.out.println("amount"+amount原创 2017-08-15 21:30:36 · 679 阅读 · 0 评论 -
重构,第一个案例(三)
知识点的梳理: 如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性;重构的节奏:测试,小修改,测试,小修改,测试,小修改...重要的事情说三遍; 案例描述 此实例是一个影片出租店使用的程序,计算每一位顾客的消费金额并打印详单;操作者告诉程序:顾客租了哪些影片,租期多长,程序便根据租原创 2017-08-06 13:19:09 · 973 阅读 · 0 评论 -
哪些代码需要重构(二)
Duplicated Code(重复代码) 常见的重复代码出现场景:同一个类的两个函数含有相同的表达式:提炼出重复的代码,然后让这两个地点都调用被提炼出来的那一段代码;两个互为兄弟的子类内含有相同表达式:对这两个类进行提炼函数,再将提炼出的代码上移,放入超类:如果代码之间只是类似,并非完全相同,那么就将相似部分和差异部分分割,构成单独一个函数;如果有些函数以不同的算法原创 2017-08-06 13:18:08 · 1015 阅读 · 0 评论 -
重构原则(一)
知识点的梳理: 重构(名词定义):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本;重构(动词定义):使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构;在添加新功能时,不应修改现有代码,只管添加新功能;在重构时,不能添加新功能,只管改进程序结构; 何时重构? 三次法则:第一次做某件事时只管去做;第二次原创 2017-08-03 20:58:05 · 1320 阅读 · 0 评论