【问题标题】:Is it possible to convert a WinForm to a WebForm in .NET?是否可以在 .NET 中将 WinForm 转换为 WebForm?
【发布时间】:2011-05-21 17:12:51
【问题描述】:

我不认为这是可能的,但我只是在和一位同事交谈,她说她以前做过。她在拉我的链子吗?

【问题讨论】:

  • 可能吗?是的。无需编写任何新代码就可以吗?不(如果可以的话,我认为你不会喜欢这个结果)。

标签: .net asp.net winforms webforms


【解决方案1】:

这不是你可以自动完成的。

诀窍在于 Winforms 和 Webforms 都使用普通的旧类来表示表单。但是,与 Winforms 相比,Webforms 中的类实例是短暂的;每个 Webforms 类实例只代表一个 HTTP 请求,而不是表单的整个生命周期,就像 Winforms 一样。每次您在 ASP.Net Webforms 中处理表单的事件时,您都在使用该类的全新实例。 Microsoft 费了很大的力气来尽可能地解决这个问题,但最终将 Webform 与 Winform 一样看待并不是一个好主意。

您绝对可以将 Winforms 应用程序重写为使用 Webforms,但这只是:重写。

【讨论】:

    【解决方案2】:

    是的,这是可能的。如果您的应用程序设计得足够好,那么只需更换 UI 层并替换它,就可以将 Win Forms 应用程序转换为 Web 表单应用程序相对容易。您正在重用逻辑和数据层(这是所有功能所在的地方)。

    显然,您必须从头开始编写一个新的 UI 层,但是,如果逻辑层写得足够好,与从头开始重新编写整个应用程序相比,这不会是太多的工作。

    但是,即使您的应用程序编写得非常好,也存在一些问题。逻辑层可以假设一个有状态的应用程序,在这种情况下它可能依赖于延迟加载。在 Web 应用程序中,您有一个在请求和响应上运行的无状态模型。在那种情况下,您会预先知道您需要什么,并且可以只加载您需要的位,而不是稍后可能需要的其他东西......因为稍后将是一个不同的请求/响应周期以及您的所有数据collect now 将在当前响应完成后立即被删除。

    我最近一直在将最初是 WinForms 的应用程序的逻辑放入 MVC 中,获得响应速度的最大障碍是,尽管写得相当好,但逻辑层假定了一个有状态的环境。同样的应用程序也正在为 WPF(另一种有状态的环境)重写,没有太多问题。

    【讨论】:

      【解决方案3】:

      将桌面应用程序转换为 Web 应用程序有几个挑战:

      • 访问硬件
      • Windows API 调用
      • 应用程序状态管理
      • 访问文件系统
      • 访问控制
      • 使用特定于桌面的 UI/UX/控件

      有一些选项可以自动转换桌面应用程序,这些选项可以转换 UI 和应用程序的代码:

      即使使用自动迁移工具,在大多数情况下,您也必须执行大量手动工作才能使应用程序以与原始应用程序相同的方式工作。

      其中一些工具将有助于实现不同的目标,第一个将帮助您仅将 UI 转换为 WebForms,最后两个将生成 ASP.NET MVC,一个使用自定义运行时和一组库,另一个使用常见的 HTML/JS/CSS 库,例如 Kendo MVVM、Kendo UI、AngularJS 或 Bootstrap 等。 这些工具将提供一个比从头开始在 Web 中编写应用程序更快的解决方案,并将提供解决方案或至少指导来应对前面提到的挑战。但是,与专为 Web 设计的应用程序会有一些差异,这仅仅是因为架构不同,并且通常为桌面应用程序编写代码的方式假定了 Web 应用程序无法假定的内容。

      免责声明:我为构建 WebMAP 的 Mobilize.Net 工作。

      【讨论】:

      • 我猜visual web gui已经倒闭了。
      【解决方案4】:

      除了之前的答案,请注意,有一些 winform 功能根本不存在于 webform 中,因此它首先取决于 winform 中的内容。

      【讨论】:

        【解决方案5】:

        只是一个评论:重写取决于表单本身有多少逻辑。正确分离关注点后,只需将另一个 UI 插入业务层即可。

        问题在于,当然,90% 的应用程序都不是复杂的 CRUD UI(没有真正的业务逻辑)...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-01
          • 2012-03-26
          • 2017-03-23
          • 2020-09-06
          • 2018-11-21
          • 2010-09-28
          相关资源
          最近更新 更多