一、 引言 有两个主要原因使得Visual Basic极为流行:VB6程序员和OOP程序员。VB6程序员想要VB确实易用;OOP程序员认为VB需要成为一种象C#或C++一样强有力的语言,否 则VB只是一个玩具。VB不可能是一种业余爱好者的语言,并且也不可能同时又是一种完全意义上的面向对象的语言,并且微软不可能去统计应该满足哪些用户。 因此现在,VB在尽力满足以上二者。例如,VB.NET包含了多线程和操作符重载技术,但是IDE并不支持支持VB重构。加入可定制的特性吸引了VB6程 序员,而添加操作符重载吸引了OOP程序员。然而,微软承认,排除对VB的IDE重构支持是一个忽略。所以,稍后,他们又开发了Refactor!以用于 VB.NET,并支持自由
下载。
什么是重构呢?根据Martin Fowler的解释,重构是一种改进代码的内部结构而不改变其外部行为的建构方式。(Martin Fowler公开呼吁重视重构的使用;William Opdike被认为是重构的发明人。)
我站在什么立场呢?玩具语言是由玩具制造者使用的。玩具制造者有其自己的市场(特别是在圣诞节期间),但是我有现实的业务逻辑需要解决并且能够用商业级的工具来创建玩具但是不能用玩具创建商业级的工具。
你不必同意我的观点,但是你应该了解重构,因为甚至是经拙劣修改后的应用程序都有可能变得非常复杂;重构是一种恢复现有代码而不需要改变其行为的按照既定规则操作的方式。更改结构和维持行为都是重构的关键原则。
二、 重构的原因 重构能够指引你穿越"并不复杂的"代码而且不拆断或改变代码。每个重构都有一个明确的动机-用一系列步骤显示怎样完成该重构及其所希望的结果。一些重构基于现有技术,而另外一些重构基于新的技术,但是所有的重构都被命名并被清晰地建档。
一个常见的重构示例是封装字段。封装字段意味着取得公共变量,使之成为私有变量,然后通过函数提供对它们的存取。这种重构被良好建设,以至它成为一种时髦属性。也就是说,一些程序员仍然使用公共字段,尽管一般人总是会避开这种编程实践。(我的文章《
用VS 2005创建宏代码生成器》向你展示了怎样用VB宏实现字段的封装。)
Visual Studio.NET 2005支持C#重构,但是在VB.NET 2005中并不支持。然而,由于一个整洁的工具Refactor的出现,现在的VB开发者不必再编写他们自己的重构工具了!对于Visual Basic来说,你可以从微软站点自由下载这个工具。尽管你可以手工地实现任何重构,现成的工具使之更为容易简单且更快,而且它们的使用也很有趣。
本文的余下部分将展示使用Refactor实现三种重构!在Visual Basic.Net 2005版本1.0.31中,共有三种情况:封装字段(Encapsulate Field),提取方法(Extract Method),和创建重载(Create Overload)。
三、 重构:封装字段 封装字段 的观点在于相信-公共数据是糟糕的。为了完成封装字段,把一个公共字段改变为一个私有字段并添加存取器方法来读写现在成为私有字段的值。在VB.NET中 的getter和setter实际上仅仅是方法的一些方便的符号-允许你在调用方法时,从外部象对待一个字段一样操作属性。这些方法意味着你可以对该字段 进行包装检查。
假定你有一个名字为HeartRate的公共字段-它每隔一分钟调节一位病人的心跳。坏的编码可能把HeartRate设置到500并且,象Emeril所说的,"欺骗!"病人是死了。为了防止把HeartRate设置得太高,你可以用属性方法来保护它。你可以用
鼠标右击字段HeartRate,选择"Refactor!",然后选择"Encapsulate Field"。你将在图1中看到在你的IDE中的操作类似于此。然后,你将使用向下的箭头移动目标选择器(红箭头和线)到插入点并按回车键。修改后的代码看上去如列表1所示。
图1:Refactor!使用了很好的提示信息引导你使用该工具
|
列表1:HeartRate字段被Refactor!所封装
Imports System.ServiceProcess Public Class WillRefactor Private HeartRate As Integer Public Property HeartRate1() As Integer Get Return HeartRate End Get Set(ByVal value As Integer) HeartRate = value End Set End Property End Class |
在列表1修改过的代码中,如果不使用公共属性HeartRate1,那么是无法改变HeartRate的。为了确保不把HeartRate设置得太高,你可以在Set方法中加入一些额外的代码。
四、 重构:提取方法 在编码中一种最常见的问题是,函数太长。小的函数可以重用而且更为容易地被重新改编进新的行为 中。一般情况下,很长的代码关系紧密的函数通常仅用于限制非常严格的情况下。为了使代码易于重用,你可以提取代码片断以形成一些命名方法。除了这些命名的 方法要易于重用外,其命名还要清晰地解释该方法的目的。
为使用提取方法,选择一段你想要转换成一个命名方法的代码片断,然后在选择的代码片断上右击鼠标,并且选择"Refactor!|提取方法"。为了说明问题,我使用了一个简单的for循环-它把HeartRate向控制台输出100次。
如果你仅有一个可用的重构,那么可以使用一键重构-通过按下Ctrl+~-这可以激活重构并且显示一个动作提示(见图2)。再一次,在它的当前位置前后 移动选择器并且按下回车键。在按下回车键后,方法PseudoLongMethod和新提取的方法被修改,详见列表2。
图2:当前可用的重构和动作提示,提取方法
|
列表2:方法PseudoLongMethod被重构,这使得BunchOfCode成为一个独立的方法:
Imports System.ServiceProcess Public Class WillRefactor Private HeartRate As Integer Public Property HeartRate1() As Integer Get Return HeartRate End Get Set(ByVal value As Integer) HeartRate = value End Set End Property Public Sub PseudoLongMethod() ' a bunch of code BunchOfCode() End Sub Private Sub BunchOfCode() Dim I As Integer For I = 1 To 100 Console.WriteLine(HeartRate) Next End Sub End Class |
五、 重构:创建重载 假定BunchOfCode的定义是接收一个Count参数(Count用于循环的上限值);并且假定,在某些情况下已知一个缺省值。你可以右击 BunchOfCode(见列表3)并且选择"Refactor!|Create Overload"以创建一个新方法来重载BunchOfCode并且用一个缺省值来调用原始方法(见列表4)。
列表3:具有单个参数的新版本代码
Private Sub BunchOfCode(ByVal count As Integer) Dim I As Integer For I = 1 To count Console.WriteLine(HeartRate) Next End Sub |
列表4:由Refactor所创建的旧的和新的重载的BunchOfCode方法:
Private Sub BunchOfCode(ByVal count As Integer) Dim I As Integer For I = 1 To count Console.WriteLine(HeartRate) Next End Sub Private Sub BunchOfCode() Dim lCount As Integer = 0 BunchOfCode(lCount) End Sub |
六、 重构的代码是很好的代码 重构是重要的,并不是因为其潜在的技术都是新技术,而是因为该技术被加以描述而且动机和所希望的结果都是非常明确的。重构能改进内部的结构而不改变现有 代码的外在行为。它去掉了什么是好的代码和什么是差一些的代码的主观性:经重构的代码被认为是好的,而未经重构的代码被认为差一些。(完美的代码可能不存 在。)
代码是好一些还是差一些并不比它是否能够工作更为重要。重构增加了代码在发展和进化过程中将继续工作的可能性。
分享到:
相关推荐
Visual Studio 2005是微软公司推出的一体化开发环境,支持多种编程语言,如C#、VB.NET、C++等,为开发者提供了强大的设计、编码、调试和部署工具。以下是一些关键的知识点: 1. **IDE(集成开发环境)**:Visual ...
根据提供的信息来看,实际关于"Visual Studio 2005 高级编程"的具体内容并未给出,但从标题和描述中可以看出这份资料应该是介绍如何利用Visual Studio 2005进行高级编程的一些指南或者教程。接下来,我们将围绕这个...
- **数据库开发**:学习如何使用Visual Studio 2005中的数据库工具,如SQL Server Management Studio Express,进行数据库设计和管理。 - **Web开发**:掌握ASP.NET框架,创建动态网页和Web应用程序。 - **性能优化*...
Visual Assist X是一款强大的Visual Studio插件,专为提升C++, C#和VB.NET等编程语言的开发效率而设计。...安装并配置Visual Assist X 10.6.1822.0版本,将使你在Visual Studio 2010中的开发体验得到大幅提升。
Microsoft Visual Studio 2005 是一款由微软公司开发的集成开发环境(IDE),支持多种编程语言如 C#、VB.NET 等。在进行软件开发时,熟练掌握并运用快捷键能够显著提高开发效率,减少不必要的鼠标点击操作,使得开发...
本文介绍了Visual Studio 2005 IDE中的一些实用技巧和窍门,包括常用的键盘快捷键以及如何生成快捷键列表。掌握这些技巧将有助于提高开发效率,使得开发者能够更加专注于核心逻辑的实现,从而提升整体项目的质量。在...
- **技巧说明**:在Visual Studio 2005中,用户可以通过快捷键Ctrl+G快速打开“转到”对话框,输入行号即可直接跳转到指定代码行。 - **应用场景**:当需要快速浏览或修改特定行的代码时,此功能尤为有用。 - **实际...
《Visual Studio 视频学习教程》是一套针对微软开发环境Visual Studio的全面教学资源,旨在帮助初学者和有经验的开发者提升在Visual Studio中的技能。本教程覆盖了Visual Studio的基础知识、高级特性以及实践应用,...
Visual Studio是一款强大的集成开发环境(IDE),用于编写各种类型的软件应用程序。为了提升开发效率和代码质量,Visual Studio支持多种插件,其中“Visual Assist X”是广受欢迎的代码补全和增强工具之一。 Visual...
- **Visual Studio Online 集成**:可以连接到Azure云服务,实现代码版本控制、协作和持续集成。 - **测试工具**:内置单元测试框架,便于进行软件质量保证。 - **UI设计工具**:如WPF、ASP.NET和WinForms设计器...
- 通过Visual Assist X,用户可以方便地进行代码重构,如重命名变量、提取方法、移动或复制代码块,这些操作均能在整个项目中一致更新,确保了代码的整洁性和一致性。 - 文件导航功能使开发者可以快速跳转到任何类...
- **.NET Core**:了解.NET Core的跨平台特性,以及如何在Visual Studio中开发.NET Core应用。 - **移动应用开发**:学习使用Visual Studio开发iOS、Android和Windows Phone的移动应用。 以上知识点覆盖了Visual ...
综上所述,了解并掌握这些Visual Studio使用技巧,将有助于提升开发者的开发效率和代码质量,使得在软件开发过程中更加得心应手。阅读“vsnettt_infoq_chinese.pdf”文件,您将获得更深入的指导和细节,从而更好地...
Visual Studio 2005是微软推出的一款...如果你是初学者,这个教程将有助于你快速上手,并提升在Visual Studio 2005中的开发技能。在使用过程中,记得结合实际练习,理论与实践相结合,以更好地掌握这个强大的开发工具。
- **智能感知**:Visual Studio的智能感知功能可以在你输入代码时提供自动补全建议,减少手动输入,提高编写速度。 - **快速修复**:在遇到语法错误或潜在问题时,Visual Studio会提供快速修复选项,一键解决常见...
离线帮助文档是开发者在没有网络连接时的重要参考资料,它包含了Visual Studio 2013的所有功能、API、教程和故障排除指南。 首先,让我们深入了解Visual Studio 2013的主要特性: 1. **改进的代码编辑器**:VS ...
通过这个种子文件,用户可以在BitTorrent客户端上下载Visual Studio .NET 2003的安装包,利用P2P技术分发流量,提高了下载速度和效率。 总的来说,Visual Studio .NET 2003是.NET开发的一个里程碑,它提供了一个...
Visual Assist是一款广受欢迎的Visual Studio插件,尤其在针对2005版本的开发环境中,它提供了强大的增强功能,弥补了原生工具的不足。在VC6时代,虽然也有一些类似的小助手,但在2005平台上可能会出现乱码问题,而...
10. **解决方案管理**:在Visual Studio 2008中,可以通过解决方案(Solution)和项目(Project)来组织代码,便于管理大型项目。 11. **自定义快捷键**:根据个人习惯,可以自定义快捷键,提升操作效率。 12. **...