引:作为程序员,我们都在编写各种各样的代码,然而有些程序员编写的代码则更为优秀些。差别是显然的。编写好的代码并不是所有的开发者都能够掌握的技巧。但是,这也意味着,这种技巧能够被改进。这种技能之一就包括重构你或其他人编写的代码。
一. 简介
作为程序员,我们都在编写各种各样的代码,然而有些程序员编写的代码则更为 优秀些。差别是显然的。编写好的代码并不是所有的开发者都能够掌握的技巧。但是,这也意味着,这种技巧能够被改进。这种技能之一就包括重构你或其他人编写 的代码。VS.NET 2005包括一组有助于你掌握这一方法的特征。本文正是想讨论什么是重构以及VS.NET 2005是怎样帮助你重构你的代码的。
二. 何谓重构?
作为一个开发者,我们大家都在用一种或多种语言编写代码。然而,我们所编写的代码在组织,安排,可读性和结构方面往往不是最优秀的代码。当我们再次回顾 我们的代码时,我们经常会认识到需要对之进行进一步的改进甚至在某些地方需要对之进行重写。这种改进我们的代码的过程称为"重构"。注意,术语"重构"意 味着,我们在改进代码而不是改变其功能或含义。
一些常见的重构任务包括:
· 改变方法的签名
· 重命名变量
· 基于现有代码创建接口
· 把一段代码转变成一个独立的方法
三. 重构(Refactor)菜单
现在我们来讨论最令人感兴趣的内容。VS.NET 2005中包括一个菜单"Refactor",你可以用它来实现一些常见的重构任务。下图显示出这个Refactor菜单和它的菜单项。
![]() |
四. 重命名变量,属性和方法
在很多情况下,当你写完大量的代码时才发现应该 更改某些变量、属性和方法的名字。最常见的理由就是改进其可读性。传统的方法是使用"编辑"菜单中的"查找和替换"选项。遗憾的是,我们的代码并不是一个 工作文档,因而调用"查找和替换"可能并不十分有效。而且,偶然替换不想要的符号的可能性是很大的。"Refactor"菜单下的"Rename"菜单选 项能够帮助你容易地完成这一任务。
为此,你需要转到你想更改的属性或方法名处,然后选择"Rename"菜单选项。这将打开一个如下显示的对话框:
![]() |
之后,你可以输入变量、属性或方法的新名,然后点击OK以便在每处都改变它。注意,在你真正应用它们之前,你可以预览所作的改变。下图显示出"Preview"对话框。你可以观察一下你不选择某些位置时所带来的变化。
五. 提取一个方法
让我们考虑一种典型的情形。你开始编写一个很长的方法-它包含一些非常复杂的算法集合。在完成该方法以后,你可能意识到它变得太大和太复杂了,以至于其 它小组成员无法容易地理解它。因此,你决定把它拆分成多个小函数。这不仅会简化你的代码而且还能够改进其易读和可维护性。"Refactor"菜单下 的"Extract Method"选项正是适合这一工作。
为了使用这个菜单选项,你必须选择你想分离为一个方法的代码块,然后点击"Extract Method"菜单选项。下图展示了"Extract Method"对话框。
![]() 点击"Extract Method"菜单选项 |
一旦你输入了要创建的新方法的名字并且点击OK,那么它为你完成两件事情:
· 它根据你的每一次选择创建一个新的方法并且替换其中的所有选择的代码
· 它用一个到这个新创建方法的调用来替换选择的行
六. 创建包装类级变量的属性
让我们接受这样的事实-许多开发者都习惯把类级变量(字段)暴露给外界。由于每一个对象都属于面向对象编程,所以开发者应该允许通过属性或方法来存取变量。这种情况可以使用Refactor菜单下的"Encapsulate Field"选项来进行处理。
为此,选择你想包装在一个属性中的类级变量并且选择"Encapsulate Field"选项。这将打开一个如下图所示的对话框:
![]() 选择"Encapsulate Field"选项 |
你需要输入该属性的名字并且决定是否你想从类外或类内部更新到该变量的参考。就象"Rename"对话框一样,你可以在应用之前先预览一下所作的改变。
七. 提取接口
有时,在你创建完一个类后才发现你还有其它一些类具有类似结构但是仅具有不同的实现。这是使用接口的一种典型的情形,Refactor菜单下的"Extract Interface"选项可以帮助你完成这一任务。
为此,你需要位于这个类中,并且选择"Extract Interface"以弹出一个如下图所示的对话框:
![]() 选择"Extract Interface" |
你需要指定接口名,存储接口的文件名以及要包含到该接口中的成员。点击OK创建一个新文件并且在其中创建一个方法。而且,你从其中提取接口的类将被自动标记以实现这个接口。
八. 把本地变量改进为方法参数
另一种常见的场所是把一个方法中的本地变量转换为一个方法参数。在这种情况中,Refactor菜单下的"Promote local variable to parameter"选项有助于实现这一目标。这只需要把你的定制放到你已经声明变量的代码行上并且点击这个选项。你会发现,现在该变量看起来就象一个方 法参数,而且所有到该方法的调用都得到相应的更新。注意,为了使这个选项能够工作,有必要把这个变量初始化为某个值。
九. 删除方法参数
你还可能需要删除一些或所有的方法参数。在这种情况下,Refactor菜单下的"Remove Parameters"选项正是完成此任务的。
为此,你需要位于其参数需要删除的方法的内部,并且选择"Remove Parameters"选项。这将产生一下如下图所示的对话框:
![]() 选择"Remove Parameters"选项 |
然后,你可以删除需要的参数。所有的方法调用连同接口定义也都将被更新-根据新的签名。就象以往一样,你可以在应用之前先预览一下变化。
十. 重新安排方法参数的顺序
添加方法参数后,删除它们很简单。但是,能够重新对之进行排序呢?别担心。有一个"Reorder Parameters"选项可以实现这一目标。这个选项仅能在具有两个或多个参数的方法上工作。当选择它时,将打开一个如下图所示的对话框:
![]() "Reorder Parameters"选项 |
你可以把参数往上移或往下移,并且观察预览结果。就象删除参数选项一样,所有的方法调用随着每一个新的参数序列将会自动地更新。
十一. 小结
重构相当重要,而且也是许多开发场所下的最常见的需求。为此,VS.NET 2005提供了必要的工具来快速地重构你的代码并且改进它的整个组织,结构和可读性
另外,你还能控制是否你想要改变在注释和字符串符号中的名字。