代码之家  ›  专栏  ›  技术社区  ›  Robusto

将vb6应用程序移植到vb.net:有人能估计这需要多少努力吗?

  •  10
  • Robusto  · 技术社区  · 14 年前

    2002年,我为一个客户开发了一个相当大的vb6应用程序。它使用了很多用户控件和第三方菜单控件(用于在菜单名称旁边放置图标)。它有动态的“可拆分”面板、带有多状态复选框的treeviews等等,是一个非常丰富的ui。我在这个项目上的总时间约为500小时,客户亲切地让我把时间分散在 整整一个月 . (是的,是的 那个 不过,他们很高兴,而且他们按时付账,没有争吵。

    因此,在多年没有联系他们之后,他们突然打电话来,想知道我是否可以为他们将应用程序更新到.net。我最初的反应是拒绝,因为我不使用vb.net。我读了很多关于移植困难等的文章,甚至 更多 可以说,倾向于拒绝。

    不过,在我告诉他们“不”之前,我对大致量化这项工作的工作量很感兴趣。我很想听到任何人谁做了这种事情,并有一个感觉,它是多么的工作。是吗?:

    • 比你在原作上花费的精力要少得多?
    • 比你在原作上花的精力少一点?
    • 和你在原作上做的一样?
    • 更多?
    • 还有很多吗?

    请只回应如果你真的做了这种港口。答案不一定是准确的,因为我真的只是在胡扯。我的感觉是,如果不是更多的话,努力至少会和原作一样多。但我可能错了。谢谢你的帮助。

    7 回复  |  直到 14 年前
        1
  •  9
  •   tobrien    14 年前

    我已经按你的要求做了。在我的案例中,它是一个(业余)保龄球比赛管理系统:会员数据库管理(个人信息、IRS/赢球信息、邮件列表等)、比赛管理(球员分配、得分、球道罚单生成、赢球和边罐检查登记等)以及IRS EDI通用为某一年的所有获奖者。加上大约10亿个小物件分散在大约50个屏幕/子屏幕上。

    关键是理解客户——你必须清楚他们明白这不是小事;这对你们两个来说都是一次新的冒险(特别是如果你是vb.net的新手),如果他们喜欢你之前的工作,那么他们很可能会给你在他们的nic上学习vb.net的余地/自由。凯尔。

    阅读之前的一些答案,让我提出一些建议(基于30年的软件开发经验,其中最后20年是顾问……)

    1. 如果他们愿意,就把钱拿走。你需要把你的技能带到20世纪,让他们为之付出代价(如果他们同意的话,也要这样)。 可能是 浏览杂志,毫无理由地想要“最新的东西”,但也许他们意识到通过这个端口可以延长(你的)应用程序的使用寿命。从本质上说,他们可能有各种愚蠢的理由来做这件事…如果他们不雇佣你来决定这个港口是否是个好主意。然后,你可能会对建立良好客户关系的决策过程表示失望;但如果他们想这样做,那也可能是你的工作。

    2. 把这些胡言乱语都拿出来:C vs VB.net加一粒盐。我从vb.net/aspx.net(vs c)诞生以来就专门从事这项工作,还没有遇到vb.net中无法实现的任何功能。有一些“纯粹主义者”只是把vb.net看作一个玩具。好吧,我来自汇编程序的日子,然后是C,然后是C++(你可以输入Fortran,PL1很好地测量),然后是VB5,然后是6,然后是VB.NET……现在是Android的Java。很有趣…每一种都有其优缺点。记住,C和VB.NET本质上只是实现元语言中介的gui。你可以写一个糟糕的(根据效率、内存使用或你选择的任何指标来衡量!)用C语言编写的程序和用VB.NET编写的好程序(反之亦然)并不等同于好的编程和语言语法。(……C是“高级”吗?????让我休息一下。)

    3. 我选择允许visual studio在第一次通过时完成大部分繁重的工作。然后你会经历无数次的错误并把它清理干净。进展很快。

    4. 但您需要决定是否利用您在vb6中手工编写的任何框架优势。例如,通过一个字符串循环来定位一个特定的字符现在和字符串indexof(“c”)一样简单,我发现在我的例子中,我已经多次遍历代码,并且随着我的习惯,越来越充分地利用了类(即面向对象)和框架的优点。…这会增加您的开发时间(请参阅客户机理解咒语),但您的代码将比VB6中的代码更加高效。你 能够 只需移植以消除错误,而不必从框架中利用任何优势。

    5. 我没有发现第三方active-x控件有任何问题。您可以添加对框架对象、COM对象等的引用。控件供应商甚至可能具有.NET(托管代码)版本…或者有合适的选择,因为你写的东西在vb6中。(见客户理解咒语)

    所以如果你 仍然 阅读之后,我将告诉你,我在vb.net中的应用程序的第二次尝试是从vb6转换/移植到一个工作模型的大约1/3的时间…我也在学习这个框架。(如果你对自己的技能有信心,那么多年来你已经学会了一些语言,你将很快了解vb.net的要旨——这是需要一段时间的微妙之处。)

    我必须提醒你,如果你不充分地宣传客户的理解,那么真正会让你丧命的是,他们是否想在你移植时进行更改(这很可能是因为他们已经使用了一段时间了……我的情况也是如此。

    这里没有硬性规定。这可能是因为更改实际上将帮助您更快地更好地理解框架,或者更改可能是一个真正的痛苦。只有你才能确定它们的味道。如果它们看起来是痛苦的类型——您可能会要求首先进行转换,以便可靠地复制功能——然后返回并检查代码以进行更改,并在必要时利用框架。但是,正如我所说,这里没有硬性规定——不要让纯粹主义者对你说的不同——记住,他们可能就是说帕斯卡要接管世界的人!

        2
  •  4
  •   Jon Seigel    14 年前

    因此,在多年没有联系他们之后,他们突然打电话来,想知道我是否可以为他们将应用程序更新到.net。

    你得问问 为什么? 他们希望这件事完成。

    客户一时兴起做技术决策是个糟糕的计划。在应用任何解决方案之前,请彻底了解他们的需求和问题。只有当你像他们那样理解了问题之后,你才能提出建议。

    可能是他们迷恋一个流行语,想用最新的东西,也可能是其他一百万种东西中的任何一种。解决他们的问题可能非常容易,但如果你不知道他们的问题是什么,你永远不会知道解决问题的最佳方法。

        3
  •  3
  •   Dave    14 年前

    我会计划花费大约50%的时间和精力来创建它。

    我完全按照你的要求做了一个商业软件产品,它大约由500 kloc组成。我们平衡了重构的欲望和尽快让某些东西工作和发布的欲望。

    几乎整个团队花了整整一年的时间才完成……一个产品用了4年的时间才创造出来。这是一项不可低估的巨大事业。

        4
  •  2
  •   Mikey    14 年前

    我们现在做的正是这个,不过有点不同。不是一个巨大的应用程序,而是有许多较小的应用程序。不过,名单上还有几个更大的。我们发现,这项工作比我们最初想象的要少得多。但是…最大的未知数与我们拥有的第三方控制有关。如果你有很多基本的重新设计,你可能会看到更多的工作。

    我的一个好建议是使用visual studio 2008进行转换(而不是vs 2005)。在vs 2008中使用内置转换器的问题要比在vs 2005中少得多。不知道为什么,就是那样。

    所以,我不能说你不会再花500个小时,但很可能不会。您的大部分时间应该花在测试上,以验证没有丢失任何功能。

        5
  •  2
  •   Javier    14 年前

    在我看来,

    visual basic 6和visual basic.net是如此不同,以至于您应该忘记它们在名称上的一致性,并将其视为迁移到.net=p

    我认为你有一大优势和一大劣势:

    • 优势: 你都知道应用程序要做什么。也许你会和你的客户开一些会议,以便添加一些修改或新功能,但是你的主要要求非常清楚。当您或您的团队编写代码时,您甚至可以看到旧的工作应用程序。

    • 劣势 你得学一门新语言。说要花多少时间,是很主观的。我一直认为学习一门新语言不是问题,最大的问题是如果你必须学会编程!但你知道如何编程。你会知道你想做什么,你只需要在新的语言中搜索如何做。

    既然你必须学习.net,如果你必须估计的话,我想你应该假设它会把你 至少与上一个应用程序相同 ,甚至更多。

    我的建议是也要抓住机会学习这门新语言。如果你更倾向于拒绝这个项目,让我再给你一个主意…也许你可以估算一下你的应用程序的一个小模块,然后告诉客户你将试着去做这个模块,看看你需要多少。客户应该支付这个小模块,即使你决定不继续。

    你不能告诉客户你知道所有的需求,所以他们在某种程度上和你一起省钱。他们应该冒这个小风险(我们说的是一个小模块),因为谁比你更擅长做这个项目,你完全了解旧的应用程序!

    如果客户对此是正确的,你可以用更多的论据来做出决定。如果你最终决定继续,完成这个小模块,你可以比以前更好地估计整个项目。

    对不起,我的英语不是很好,可能我犯了很多数学错误。

    编辑 语法错误…= P

        6
  •  1
  •   Esteban Küber    14 年前

    这是一个巨大的话题。

    你应该看看女士的免费书- Upgrading Microsoft Visual Basic 6.0 to Microsoft Visual Basic .NET .

    如果要从头重写,而不是简单地尝试移植前一个应用程序,则不应花费太长时间。net的一些特性将使新的应用程序构建变得更短。因为你似乎还不了解vb.net,所以花在你身上最多的时间是学习如何做事。 新途径 (TM) .

        7
  •  1
  •   Joel Coehoorn    14 年前

    这次我要去两个月。

    但说真的,这可能不远,甚至不低,因为客户会有一些 原因 因为需要完成端口。这将不仅仅是一个直接的港口-他们将需要一些“小的增强”将炸毁整个项目。

    另外,我会担心第三方控制。剩下的大部分应该可以转换,但有时在.net中找到一个与第三方控件很好的模拟存在问题。

    我还担心你不使用vb.net。如果你是一个c用户,并且想用这种方式重新实现,你会很好,但否则这是一个非启动。net与vb6的差别已经足够让你陷入麻烦了。

    除此之外,我希望这次的工作比上次少,因为你面前摆着一个非常明确的设计,你只需要遵循它。