使用Eclipse完成经典的重构

来源:互联网 发布:末日人工智能怎么算赢 编辑:程序博客网 时间:2024/04/30 16:19
       相信很多人都已经阅读过重构的经典《重构》一书,里面教给了我们好多优秀的重构方法,让我们能够将我们的面向对象的程序编写的更有效,更方便于复用。那怪人们都称之为与《设计模式》齐名的好书。

       在书中,作者还在感慨当时没有优秀的重构工具,大部分的重构工作都只能通过查找/替换来完成,幸亏有Unit的测试工具来保证质量,否则难度是不可想象的。

       然而,我们现在非常幸运,在Eclipse中以及最新版本的Jbuilder中都具备了完美的重构功能,下面我们就一起来看看如何使用在Eclipse当中如何完成经典的程序重构工作。

       首先,我们根据《重构》一书中的例子建立了一个名为“Refactoring”的包,在其中分别建立了名为“Movie”,“Rental”和“Customer”的类,并在其中键入最初的代码。

从上面的图中我们可以看到我们已经建立了初始的代码,下面就让我们一起使用Eclipse来对这个程序进行重构。

(一)  分解并重组statement()

第一个需要重构的是statement()这个函数,里面的代码过长,非常不容易理解,我们首先要将其中的一部分抽取出一个方法,然后进行相关的处理。

选择整个switch语句,然后点击右键,在弹出的菜单中选择“Refactor->Extract Method”,如下图示。

此时会弹出ExtractMethod的窗口,我们现在要建立的新方法的名字是amountFor,所以在“Method name”文本框中键入名字,在窗口的下面我们可以看到重构出来的方法的说明。

如果点击“Preview”按钮,我们可以预览重构以后的代码,Eclipse非常形象的向我们展示了是如何将一个方法抽取出来的。点击“OK”按钮,Eclipse就会自动完成抽取的工作。

此时方法中的参数thisAmount是我们不需要的,所以我们要修改对方法的声明。点击右键,在菜单中选择“refactor->ChangeMethod Signature”。

在弹出的对话框中我们可以看到当前对amountFor的定义,下面列举着当前的两个参数“thisAmount”和“each”,选择第一个参数,点击“Remove”按钮,就可以将其删除。

但是现在直接删除掉这个参数会出现错误,Eclipse自动弹出了对话框,提示用户。

我们确认要删除这个参数,所以点击“Continue”按钮继续修改。

Eclipse会自动检测出错误,并在有问题的语句下面用红色的波浪线标记出来,

之所以提示这样的错误,是因为这个变量在方法中还没有定义,修改错误我们同样可以利用Eclipse提供的功能快速的完成。

将光标定位在thisAmount上,然后按下“ctrl-1”,Eclipse会自动弹出修改建议,在这里我们选择“创建本地变量thisAmount”,这样Eclipse就会自动为我们定义这个变量。

但是这个时候我们依然会看到thisAmount下面有红色的波浪线,因为我们的这个变量在定义了之后还没有初始化,再次在thisAmount下面按下“Ctrl-1”,在弹出的菜单中选择“初始化变量”,这时Eclipse就会为我们自动初始化这个变量。

我们看到,我们并没有键入一个字母,只不过按了几个键,然后在菜单中进行了相关的选择,我们就已经完成了好多处理,这样不仅提高了我们编码的效率,而且避免了一些低级错误的出现。

然后,我们发现thisAmount的类型有些问题,我们要返回的是一个Double型的数据,而系统自动定义的是一个整型的,这会在处理的时候进行自动取整的操作。所以我们需要将thisAmount的类型改变一下。

接下来,我们发现当前我们使用的变量的名字不是很好,因为没有明确的意义。《重构》书中有这样的一句话“能编写出能够让人看懂的程序的程序员才是真正优秀的程序员”,因此我们需要再次进行重构的操作——改变变量的名字。

选择thisAmount变量,然后点击右键,在弹出的环境菜单中选择“Refactor->Rename”,将这个变量改名。

弹出的改名的对话框非常简单,上面显示出当前的名字,接下来我们要改变这个名字。

在文本框中键入我们的新名字,“Result”,点击“OK”按钮,系统就会自动在整个程序中查找与thisAmount这个变量相关的内容并将其替换。

采用同样的方法,我们对each这个变量重命名为aRental,这样的意义更加明确。更改完毕的代码如下图示,这样我们就完成了第一个重构的步骤。