16

有人对将 PowerBuilder 10 业务应用程序迁移到 .NET 有什么建议吗?

我的公司正在考虑将遗留的 PB 应用程序迁移到 .NET (C#),我只是想知道是否有人有任何经验——好的或坏的——你想分享。

该应用程序相当大,有 10 个 PBL 库、一些 PFC 以及自定义框架。还有大量的 DLL 调用。最后,它使用 Microsoft SQL Server 数据库。

我们已经讨论了将“核心”应用程序代码移植到 .NET,然后根据需要移植更高级的功能。

4

9 回答 9

24

当我看到标题时,我只是想潜伏,成为一个有名的PB偏执狂。那好吧。谢谢你的信任投票,伯纳德。

我的第一个建议是摒弃自欺欺人的语言。如果我吃了一半“精简版”芝士蛋糕,我仍然会看不到我的腰带。迁移可能只需要 10 分钟。你要做的是重写时间需要作为重写来衡量。风险需要作为重写来衡量。设计工作应该作为重写来衡量。

是的,我说的是设计努力。“迁移”让人联想到通过某个黑匣子抽取代码的图像,其中的翻译反映了从另一边出来的原始代码。您是否想复制您在 1994 年犯下的相同设计错误?即使有优秀的代码,我猜 PowerBuilder 中优秀的设计选择在 C# 中可能是糟糕的设计选择。直接转换是否忽略了平台的力量和优势?在接下来的 15 年里,你会忍受忽视良好 C# 设计的后果吗?


撇开这些咆哮不谈,因为你没有提到你“迁移到 .NET”的动机,所以很难建议你可能需要哪些选项来降低重写的风险。如果您的管理层只是决定 PowerBuilder 开发人员闻起来很糟糕,需要从办公室中删除,那么祝您重写顺利。

如果您只是想部署 Windows 窗体、Web 窗体、程序集或 .NET Web 服务,或者利用 .NET 库,那么正如 Paul 所提到的,迁移到 11.0 或 11.5 可以让您更接近迁移。(我建议再次审查并确保您已经为新平台设计了一个好的设计,尤其是 Web 窗体,但这种工作应该比重写要小得多。)如果您想部署 WPF 应用程序,我知道一年的等待时间很长,但研究 PowerBuilder 12 可能是值得的。如果正确使用,WPF 功能可能会将 PowerBuilder 置于独特而强大的位置。

如果保证将来会进行重写(淋浴似乎更便宜),您可能希望分阶段进行转换。DataWindow.NET 使您可以随身携带 DataWindows。(我本周的宠物理论是,PowerBuilder 开发人员认为 DataWindow 是理所当然的,直到他们必须重现所有内置的功能。)能够放弃预先存在的、预先测试的、多行的、可滚动的、最小的资源消耗、可打印、数据绑定的动态 UI,生成具有内置逻辑记录锁定和数据库错误转换为事件的最小 SQL,进入新应用程序是一大优势。

您还可以通过将 PowerBuilder 代码转换为可由 .NET 应用程序使用的东西来分阶段进行转换。如前所述,您可以使用现有的 PB 10 生成 COM 对象,但必须移至 11.0 或 11.5 才能生成程序集。这个值可能取决于您的应用程序的分区程度。如果您的业务逻辑在 GUI 事件和函数中蜿蜒而行,而不是被划分为非可视对象(也称为自定义类),那么它的价值可能值得怀疑。尽管如此,这是一个设计失误,可能应该在完全转换为 C# 之前修复;这是可以在保持 PowerBuilder 应用程序作为分阶段然后完全转换的初步步骤的同时完成的。

毫无疑问,我宁愿看到你留在 PowerBuilder。失败了,我希望看到你成功。请记住,一旦你吃了第一口,你就必须吃完

祝你找到那条腰带,

特里。


我看到您提到将“核心组件”移动到 .NET 开始。正如您现在可能猜到的那样,我认为分阶段的方法是一个明智的决定。现在“核心”的定义可能是有争议的,但相反的观点又如何呢?值得深思?(显然,这周开始节食是错误的。)根据 PB 现在的情况,很难根据应用程序功能(例如,PB 中的应收账款,C# 中的应付账款)在 PB 和 C# 之间划分您的应用程序。一个可能起作用的部门是 GUI 与业务逻辑。如前所述,将业务逻辑从 PB 中抽取到 C# 可以使用的可执行文件中已经成为可能。用 C# 构建 GUI,从 PB 复制 DataWindows 并将业务逻辑作为 COM 对象或程序集抽出,怎么样?换一种方式,在 PB 中使用 .NET 程序集,COM 可调用包装器

或者,只需在 PowerBuilder 中培训您的 C# 开发人员。这可能只是一个谣言,但我听说新的 PowerBuilder 营销标语将是“如此简单,即使是 C# 开发人员也可以使用它”。;-)

于 2009-05-07T05:37:46.850 回答
6

我认为 gbjbaanb 在上面给了你一个很好的答案。

其他一些值得考虑的问题:

  • 这个 PB10 应用程序是一个新的、编写良好的 PB10 应用程序,还是它是 1998 年在 PB4 中制作的,然后多年来逐渐转换为 PB10?一个编写良好的应用程序应该在业务逻辑和 GUI 之间进行适当的隔离,并且您应该能够系统地将您的代码移植到 .Net。至少,它应该比这是一个传统的 PB 应用程序要容易得多,在这种情况下,您可能会将大量逻辑隐藏在按钮、数据窗口、菜单中,谁知道还有什么。并非不可能,但更难返工。
  • 应用程序的运行情况如何?如果它还可以并且稳定,并且不需要很多新功能,那么也许它不需要重写。或者,正如 gbjbaanb 所说,您可以将 .Net 包装器放在某些部分上,然后公开您需要的功能而无需完全重写。另一方面,如果您的应用程序是坏的、令人讨厌的,并不能真正满足业务需求,并且使您的用户效率低下,那么您可能需要重写,或者进行一些严重的重构,然后进行一些增强。有PB家伙在服刑,呃,我的意思是,以第二种情况为生。

如果软件非常糟糕并且对公司的业务产生负面影响,我不反对重写,但即使这样,逐步调整和改进也是实现系统演进的风险较小的方式。

另外,在 Terry Voth 发帖之前不要放弃这个线程。他在 StackOverflow 上,是顶级 PB 人员之一。

于 2009-05-05T17:33:32.230 回答
4

如果它相当大,您可能会在 .net(或基于 Web 的 GUI)中为它编写一个前端并使用它与您的 PB 代码进行交互,假设您可以将其作为 API 公开的功能获得更好的结果。

如果您使用的是 PB 9 或更高版本,您可以生成 COM 或 .NET dll,然后您可以通过 C# GUI 使用它们。我会推荐这个,而不是用任何新语言重写。

请记住,重写从来都不是灵丹妙药,它们最终总是比您最初预期的更加耗时、困难和错误。

于 2009-05-05T15:34:28.647 回答
3

您可能想花一些时间研究PowerBuilder 11.5(最近发布),它增加了一些重要的 .NET 集成。

迁移到 PowerBuilder 11.5 以使用新的 .NET 代码肯定比用 C# 完全重写整个应用程序要容易得多。

于 2009-05-05T18:22:46.607 回答
3

我不知道它是否好用,但请查看这个(商业)产品: PB.Net

于 2009-05-07T12:56:37.153 回答
3

我本周的宠物理论是,PowerBuilder 开发人员认为 DataWindow 是理所当然的,直到他们必须重现所有内置功能。

我支持那个理论。几年前,我在一个项目中尝试过从 PB8 到 Java 的转换,即使使用第一代 HTML DataWindow 也失败了。我现在的雇主一心想迁移到 C#,尽管我们当前的产品中有超过 2K 的 DWO,但不使用 Datawindow.NET。我不期待实现的那一天。(整个产品由几个用户应用程序、十几个服务和大约 70 个 PBD 组成)

OP - 除非您的应用程序结构异常良好(可能最初是为 EA 服务器编写的?),否则这不会是一个端口。在 PB 和 .NET 环境中,事情的工作方式太不同了,普通端口无法令人满意地工作。这一点我怎么强调都不过分——如果你真的在使用 PB 事件模型,那么“端口”可能会失败。

您需要查看逻辑流(交织的 UI 和流程)、控制流(现在谁拥有流程或数据)、数据访问(UI、数据层,??)以及您正在使用的 DW 事件模型的各个部分从代码。如果您正在考虑 ASP.NET(就像我们一样),您的整个用户交互体验将不得不改变,这将反馈到其他考虑因素中。

与代码没有直接关系,构建自动化会发生变化(我们使用 PowerGen 进行一致的 PB 构建;MSBuild 非常不同),您的安装和设置也会发生变化。

于 2009-05-08T16:58:58.443 回答
3

我认为任何考虑将其用于大型应用程序的人都会非常疯狂地不认真考虑使用 DataWindow.NET,以免失去对 DW 的投资。

于 2009-05-12T21:20:23.230 回答
3

大公司的 PHB 认为 Powerbuilder 是一种玩具语言,迁移到像 C# 这样的新语言是微不足道的,并且可以以低成本完成。事实上,将 PB 应用程序迁移到任何其他语言的成本至少与在新语言上开发全新的应用程序一样多。与原始应用程序相比,生成的应用程序通常会失去功能,并会导致用户不满。我已经看到了许多尝试 - 由于难度和用户问题,所有尝试都失败了。

如果它没有坏,就不要修理它。

于 2009-06-11T19:10:08.327 回答
0

是的,它现在是可行的,无需重写服务组件期间。

铅 12.5>

并将目标 GUI 和服务组件迁移和集成到 c#。

迁移/集成策略可能因您的项目范围、可扩展性、资源和时间线而异。

您可以在 PowerBuilder .NET 中使用这些目标和项目类型。请参阅此链接Sybase_PB .Net

  • WPF 窗口应用程序 WPF 窗口应用程序、WCF 客户端代理或 REST 客户端代理
  • PB 程序集 WCF 客户端代理、REST 客户端代理或 PB 程序集
  • .NET 程序集 WCF 客户端代理、REST 客户端代理或 .NET 程序集
  • WCF 服务 WCF 客户端代理、REST 客户端代理或 WCF 服务
于 2018-03-19T12:16:53.167 回答