`

在Visual Studio 2005中实现VB重构

阅读更多
一、 引言

  有两个主要原因使得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

  六、 重构的代码是很好的代码

   重构是重要的,并不是因为其潜在的技术都是新技术,而是因为该技术被加以描述而且动机和所希望的结果都是非常明确的。重构能改进内部的结构而不改变现有 代码的外在行为。它去掉了什么是好的代码和什么是差一些的代码的主观性:经重构的代码被认为是好的,而未经重构的代码被认为差一些。(完美的代码可能不存 在。)

  代码是好一些还是差一些并不比它是否能够工作更为重要。重构增加了代码在发展和进化过程中将继续工作的可能性。
分享到:
评论

相关推荐

    Wrox - Professional Visual Studio 2005 Aug 2006

    - **数据库开发**:学习如何使用Visual Studio 2005中的数据库工具,如SQL Server Management Studio Express,进行数据库设计和管理。 - **Web开发**:掌握ASP.NET框架,创建动态网页和Web应用程序。 - **性能优化*...

    Visual Studio 2005 IDE 技巧和窍门

    本文介绍了Visual Studio 2005 IDE中的一些实用技巧和窍门,包括常用的键盘快捷键以及如何生成快捷键列表。掌握这些技巧将有助于提高开发效率,使得开发者能够更加专注于核心逻辑的实现,从而提升整体项目的质量。在...

    visual studio 视频学习教程

    《Visual Studio 视频学习教程》是一套针对微软开发环境Visual Studio的全面教学资源,旨在帮助初学者和有经验的开发者提升在Visual Studio中的技能。本教程覆盖了Visual Studio的基础知识、高级特性以及实践应用,...

    支持VS2005的Visual Assist X\10.6.1833.0

    这款插件的版本10.6.1833.0是专为Visual Studio 2005设计的,旨在优化开发者在使用这个经典IDE时的体验。 1. **Visual Studio 2005兼容性**: Visual Studio 2005(又称VS2005)是微软发布的一款集成开发环境,...

    VisualStudio安装和配置zz[汇编].pdf

    * 在安装 Visual Studio 2008 时,需要选择自定义安装,勾去 VC++ 和 SQLSERVER2005 Express 组件。 Visual Studio 2008 的功能特点 Visual Studio 2008 是一款功能强大的集成开发环境,提供了以下功能特点: * ...

    Lap-Around-Visual-Studio-2005PPT文档.pptx

    在2005版中,VB.NET引入了泛型、部分类型和匿名方法等新特性,增强了代码复用性和灵活性。 2. **C#**:C#同样是一种面向对象的语言,2005版增加了对泛型的支持,允许编译时类型检查,降低了类型转换错误。此外,...

    visual studio.net使用技巧手册

    14. **多语言支持**:理解Visual Studio对多种编程语言的支持,如C#、VB.NET、C++/CLI等,以及如何在同一个项目中混合使用它们。 15. **代码审查和静态分析**:使用代码审查工具,发现潜在的代码质量问题,提升代码...

    Visual Basic 2005高级编程(第4版)

    这本书旨在帮助读者掌握VB2005的高级特性和技术,以便在实际开发中实现高效、高质量的应用程序。作为配书代码,压缩包中的文件提供了书中实例和练习的源代码,使得读者可以动手实践,加深对理论知识的理解。 Visual...

    Visual.Assist.X.v10.5.1724.rar

    Visual Assist X是一款广受开发者欢迎的插件,尤其在与Microsoft Visual Studio 2005集成时,它能显著提升编程效率。这款版本号为v10.5.1724的插件,被誉为Visual Studio 2005的“好帮手”,主要体现在其强大的代码...

    Visual Assist X助手最新版本(绝对最新)(版本号10.6.1823)

    5. **多语言支持**:除了C++,Visual Assist X还对C#、VB.NET等.NET语言提供支持,实现了跨语言的开发便利。 6. **增强的模板系统**:用户可以自定义代码模板,快速输入常用的代码段,提高编码速度。 7. **代码...

    Visual_Assist_X_10.9_build_2248,适用VS2010,VS2013,VS2015等

    《Visual Assist X 10.9 build 2248:强大的Visual Studio插件解析与应用》 Visual Assist X,简称VA X,是广受开发者欢迎的Visual Studio集成开发环境(IDE)的一个增强工具,其10.9 build 2248版本尤其受到青睐。...

    virtual c++ 2005 助手,也可用于vc6.0

    在C++编程领域,Microsoft Visual Studio系列一直以来都是开发者们的重要选择,尤其是Visual C++ 2005(也称为VC++ 2005或VS 2005)。然而,尽管Visual Studio自带的功能强大,但为了进一步提升开发效率,很多程序员...

    Visual Assist

    当然和以前的版本一样,它可以同时支持C++、C#、VB等各种VS支持的语言,这样,一个基于不同开发语言的项目中也能方便地使用Visual Assist来帮忙我们开发,而且从VC6开始,中间还有VS 2002、VS2003、VS2005,一直到...

    VisualC++2005CLR--颜色对话框的使用--

    通过上述分析,我们可以看出,在VisualC++2005中使用CLR和颜色对话框,不仅可以提升应用程序的交互性,还能简化开发过程中的UI设计工作。掌握颜色对话框的使用方法,能够使开发者更加灵活地处理用户界面中的颜色选择...

    计算机专业外文文献及翻译.pdf

    内置的语言中包括 C/C++ 中(通过 Visual C++ ),VB.NET 中(通过 Visual Basic.NET),C# 中(通过 Visual C#),F# 中(作为 Visual Studio 2010),为支持其他语言,如 M, Python, 和 Ruby 等,可通过安装单独的...

    计算机专业外文文献与翻译.doc

    语言服务可以在本地代码或托管代码中实现,对于托管代码,可以利用管理软件包框架(Managed Package Framework, MPF)。 Visual Studio本身并不自带源代码控制功能,但它定义了两种源代码控制系统集成的方式:一种...

    Visual Assist X 10.4.1618.0

    Visual Assist X是一款广泛应用于Visual Studio开发环境的增强工具,尤其在C++, C#以及VB.NET等编程语言中,它极大地提升了程序员的代码编写效率。版本号10.4.1618.0代表着这一经典插件的特定更新,带来了多项优化...

    有问题的程序源码(VB2005)

    4. **资源管理**:在VB2005中,对数据库连接、文件流或其他资源的不恰当管理可能导致内存泄漏或资源耗尽。 5. **设计模式**:如果代码结构混乱,遵循的设计模式不合理,也可能导致问题。例如,过度耦合的类或不恰当...

    VS2005 CodeVS2005 Code

    8. **设计模式**:在VS2005中实现常见的设计模式,如工厂模式、单例模式、观察者模式等,有助于编写可维护和可扩展的代码。 9. **性能优化**:VS2005提供了性能分析工具,可以帮助识别和优化代码的性能瓶颈。 10. ...

    VS2008转换VS2005

    这些特性在VS2005中可能需要手动重构。 5. **手动修改**:对于无法自动转换的部分,需要手动修改源代码。例如,将C# 3.0的Lambda表达式替换为传统的委托使用,将匿名类型转换为已命名类型等。 6. **项目文件修改**...

Global site tag (gtag.js) - Google Analytics