应用 Composed Method 模式
这大概是最简单的模式之一了,甚至可能有人会觉得如此简单的咚咚居然被成为“模式”是非常可笑的。不过,Kent Beck 曾说过:“some of his best patterns are those that he thought someone would laugh at him for writing.”Kent 就是在他的 Smalltalk Best Practice Patterns 一书提出这个模式:Composed Method。
良好的 Composed Method 的特征是,在方法体中,所有的代码段都处于同样的细节级别之上。比如说上图中上半部分所展示的代码,最内层 if 结构中的代码表达的是如何扩展该类使用的存储结构,而倒数第三句表达的是添加一个元素。也就是说前者是关于该类内部细节的,而后者是关于该类外部行为的。 重构之后的代码,则显得干净漂亮很多,三段代码都处于同样的细节级别之上,而命名良好的小方法也更容易让人理解这段代码的含义。
在重构为 Composed Method 模式的过程中,常常会多次反复应用 Extract Method 过程,直到目标 Composed Method 中大部分(并非所有)工作都是通过调用其他方法完成的。如果抽取了太多的代码放到一个方法中,那么有可能会使得你找不到一个合适的名字来命名这个新的方法。在这种情况下,就需要应用 Inline Method 过程将这些代码放回原来的方法中去,再想想别的办法将之解构。
如果在这项重构的过程中,在同一个类里面产生了大量由 Composed Method 调用的私有小方法,那么就可能需要应用 Extract Class 过程进一步进行重构。