Refactoring 将";有效地使用遗留代码”;帮助某人使用从VB6移植到VB.NET的应用程序?

Refactoring 将";有效地使用遗留代码”;帮助某人使用从VB6移植到VB.NET的应用程序?,refactoring,legacy,vb6-migration,Refactoring,Legacy,Vb6 Migration,我想重构一个大型遗留应用程序,它最初是用.NET编写的,后来移植到.NET。为了信心十足地完成这项工作,我希望对现有代码进行单元测试,以便在测试前后进行比较。最简单、最有效的方法是什么 有一本书叫“”,看起来对我有帮助。然而,它似乎只处理面向对象的语言,而VisualBasic6.0不一定是面向对象的。这本书还能帮我吗?我希望读过它的人能为它担保 具体来说,该应用程序只使用表单本身,不使用其他类。它直接从表单访问数据库,但并不一致。有几个人在这个项目上工作,他们都使用自己的风格,没有任何标准 正

我想重构一个大型遗留应用程序,它最初是用.NET编写的,后来移植到.NET。为了信心十足地完成这项工作,我希望对现有代码进行单元测试,以便在测试前后进行比较。最简单、最有效的方法是什么

有一本书叫“”,看起来对我有帮助。然而,它似乎只处理面向对象的语言,而VisualBasic6.0不一定是面向对象的。这本书还能帮我吗?我希望读过它的人能为它担保

具体来说,该应用程序只使用表单本身,不使用其他类。它直接从表单访问数据库,但并不一致。有几个人在这个项目上工作,他们都使用自己的风格,没有任何标准


正如我所说,这个项目已经移植到VB.NET。然而,它只是在VisualStudio2008下编译的意义上进行了移植。所有的编码概念都是Visual Basic 6.0。

它不仅仅处理(OO)语言。大部分内容是关于如何处理C语言中的遗留代码

所以,是的,买它


有一整章(第19章)叫做:

我的项目不是面向对象的。如何进行安全更改

此外,还有一个实现可以帮助您使用

事实上,我误读了这个问题,以为你要去港口,并不是说你已经港口了。在这种情况下,您有大量的“遗留”代码,这完全是适合您的书。您可以利用VB.NET的OO功能并使用本书的其余部分


我真的不能再推荐这本书了

是;这本书的概念是伟大而强大的,并且超越了面向对象编程。VB6可以是面向对象的,尽管它不像某些语言那样完全面向对象


书中最强大的概念之一是“接缝”,本质上是可以分解代码、注入测试或隔离或抽象功能位的地方。这只是适用于过程代码的概念之一。

您可能希望使问题更加具体

虽然VB6本身并不是一种纯粹的OO语言,但OO中有足够多的元素应该让人熟悉;此外,还有许多用于VB6 IDE的单元测试插件

但是让我们考虑一下一些高级的VB6组件:

  • 表单是对象(您可以创建新实例)
  • 模块的行为类似于只有静态方法的类
  • 类和用户控件与您将获得的对象尽可能接近。缺少构造函数使事情变得很艰难,但希望最初的开发人员继续使用Initialize或编写一个一致的Init sub
  • VB中的事件很奇怪;这也是最可能让你绊倒的。毫无疑问,依赖于特定事件顺序的隐藏的、有状态的代码分散在各地
  • 属性页。嗯,就是这样

从VB的最佳实践开始。如果在编写应用程序时没有考虑到最佳实践代码,我认为采取这一步骤将为您省去很多麻烦。

我建议您看看Martin Fowler's,这是一本极好的必读书籍


你可能在寻找类似的东西。我还没读过,但是看起来很有用。

你肯定有一些工作要做,但是在做任何.NET工作之前都有一个考虑的策略。 将尽可能多的底层表单代码移出到一个类中:每个表单一个类文件作为开始。本质上,表单事件处理程序除了对底层类实例中的方法进行代理调用外,什么也不做;显然,所有自定义方法都可以转移到类文件中

在阅读了Microsoft和其他人的《最佳实践指南》(best practices guide)(等)以帮助您为.NET迁移做好准备之后,您基本上已经准备好了要重新编码/重构的一点点麻烦:诸如错误处理、事件排序、后期绑定对象/变体、集合等

关于错误处理代码的一句话:尤其是很难在错误上复制意大利面条,特别是因为一般的Visual Basic编码器都不擅长将其用作控制逻辑流。如果一个例程中有两个以上的子例程,那么将每个错误块分解为单独的子例程几乎是值得的

<> P>一旦代码被清理,您还可以考虑将VisualBasic代码重构为合理的抽象(例如,单个数据适配器类和连接等),但您将是最好的判断者。
您可能不喜欢这种方法,所以一定要用一个表单测试waters。

我拥有一个副本,我购买它是为了控制我们的C/C++项目。因为我错过了C#/提供的功能

这些书很像C/C++,但是,正如John所说,有一章是关于无对象工作的


但是,如果如您所说,您的代码被移植到.NET,那么它就不再是Visual Basic 6.0代码了。NET有很多Visual Basic/C方法,可以让您连接到代码和测试中。但是也就是说,这本书将为您提供一个很好的概述,让您了解可以连接到应用程序的不同方式,以及控制大型旧项目的策略。

我认为您会发现特性测试最有好处。它们应该是自动化的。如果没有特性测试,那么您就只能通过实际运行来手动测试应用程序/代码。添加新代码时,很容易错过关键功能的测试。这是我自己的经验


添加新代码时,Sprout方法和Sprout类非常重要。

这很公平。我将编辑我的问题以突出我的担忧。我读了Martin Fowler的《重构》一书,这本书让我意识到我需要围绕我的法律进行测试