“与遗留代码有效合作”是否可以帮助某人使用从VB6移植到VB.NET的应用程序?

时间:2009-06-22 21:25:33

标签: refactoring legacy vb6-migration

我想重构最初用Visual Basic 6.0编写并随后移植到.NET的大型遗留应用程序。为了充满信心地做到这一点,我希望围绕现有代码进行单元测试,以便我可以在之前和之后进行比较。这样做最简单,最有效的方法是什么?

有一本名为“ Working Effectively with Legacy Code ”的书看起来可能会对我有所帮助。但是,它看起来只处理面向对象的语言,Visual Basic 6.0不一定是OO。这本书还能帮助我吗?我希望读过它的人可以保证它。

具体来说,此应用程序不使用表单本身以外的类。它直接从表单访问数据库,而不是一致的。有几个人正在使用他们自己的风格,没有任何标准。

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

7 个答案:

答案 0 :(得分:7)

它不仅处理object-oriented(OO)语言。大部分内容涉及如何处理C中的遗留代码。

是的,买吧!


有一整章(第19章)称为:

  

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

还有vbUnitxUnit实施可以帮助您将TDDVisual Basic 6.0一起使用。

实际上,我误解了这个问题,并认为你移植到端口,而不是你已经移植过了。在这种情况下,您有大量的“遗留”VB.NET代码,这完全适合您。您可以利用VB.NET的OO功能并使用本书的其余部分。

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

答案 1 :(得分:1)

是;这本书的概念非常强大,并且超越了OOP。 VB6 可以面向对象,虽然它不像某些语言那样完全面向对象。

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

答案 2 :(得分:1)

您可能希望更具体地提出问题。

虽然VB6本身并不是纯粹的OO语言,但是有足够的OO元素应该是熟悉的东西;此外,VB6 IDE还有许多单元测试插件。

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

  • 表单ARE对象(您可以创建新实例)。
  • 模块的行为类似于只有静态方法的类。
  • 课程& UserControls与您将获得的对象非常接近。缺乏构造函数会使事情变得粗糙,但希望原始开发人员继续使用Initialize或编写一致的Init子。
  • VB中的事件很奇怪;这也是最让你失望的东西。隐藏的,依赖于特定事件顺序的有状态代码无疑散布在各处。
  • 物业页面。嗯,就是这样。

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

答案 3 :(得分:1)

你肯定会为你做一些工作,但这是在做任何.NET工作之前要考虑的策略。

将尽可能多的底层FORM代码移出到一个类中:每个表单一个类文件作为开头。本质上,表单事件处理程序除了代理调用底层类实例中的方法之外什么都不做;所有自定义方法显然都可以转移到类文件。

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

关于错误处理代码的一句话:特别很难复制spaghetti on-errors,特别是因为普通的Visual Basic编码器在将其用作控制流逻辑时有一个糟糕的诀窍。如果你在一个例程中有两个以上的子例程,那么将每个On Error块拆分成单独的子例程几乎是值得的。

一旦代码被清理干净,您也可以考虑将Visual Basic代码重构为合理的抽象(例如,单个数据适配器类和连接等),但您将是最好的判断这一点。

你可能不喜欢这种方法,所以一定要用一种形式测试水域。

答案 4 :(得分:1)

我拥有一份副本,我购买的是试图控制我们的C / C ++项目。因为我错过了C#/ .NET必须提供的功能。

书籍非常适合C / C ++,但正如约翰所说,有一章没有对象。

但是,如果您说,您的代码移植到.NET,它不再是Visual Basic 6.0代码。 .NET有许多Visual Basic / C#方法可以让你挂钩代码并进行测试。但话虽如此,本书将为您提供一个很好的概述,可以让您了解应用程序的不同方式,以及控制大型旧项目的策略。

答案 5 :(得分:0)

我建议你看一下Martin Fowler的 Refactoring: Improving the design of existing code ,这是一本非常棒的必读书。

您可能正在寻找Professional Refactoring in Visual Basic的内容。我还没看过,但看起来很合适。

答案 6 :(得分:0)

我认为你会发现表征测试最有益。它们应该是自动化的。如果没有表征测试,您将通过实际运行来手动测试您的应用程序/代码。在添加新代码时很容易错过测试关键功能。这来自我自己的经验。

Sprout Method和Sprout Class在添加新代码时非常重要。