1

首先我想明确一点,我不是在寻找“我的技术比你的好”的帖子;这是一个真实的案例,我一直面临着这个决定。考虑到这一点,让我解释一下:

我们有一个 WinForms 应用程序。它始于早期的 .NET 1.0,但第一个发布版本使用的是 .NET 1.1。有(如 BusinessLayer.dll、Datalayer.dll、Framework.DLL 等),但在此应用程序的“长”开发周期中的某个时刻,“表示”层(Win Forms)感染了一些代码,因此,“代码与隐藏代码的表示之间的分离”是某种神话。不良做法或其他任何事情,事实是该应用程序就在那里并且可以正常工作。

几年过去了,我们有了 .NET 2.0,我们慢慢迁移,它大部分工作,不得不在这里和那里更改一些调用。上一个版本做了同样的事情,但针对 .NET 3.5sp1。我们需要某种 Web 服务,因此决定改用 WCF。它工作正常。但是,尽管进行了所有这些 .NET 升级,但该应用程序的大部分代码库仍然是 5 年前的老摇滚。我们使用 Gentle.NET(现在旧且未维护)作为我们的数据对象(这是 5 年前的福气!)。

我们的表现层,winforms,“好看”,因为我们使用了 90% 的完全 gdi+ 自定义控件。(尽可能无需破解 WinAPi)。该应用程序是基于触摸的(即:它使用了 Ink,但它不依赖于它),但是按钮、标签等一切都是“设计”为与触觉设备一起使用的。(平板电脑或触摸屏)。当然有些用户使用键盘/鼠标。

考虑到所有这些,以及所有这些 web2.0 和 Internet fuzz(加上 Jeff 的帖子;)),我们正在考虑重写应用程序但使用 Web 技术的可能性。这个想法显然是为我们的客户带来更多的可用性(他们可以随时随地使用系统)和更少的维护(我们可以升级,这是他们所有人的即时升级)等等。你知道,通常的互联网vs WinApp 的东西。

问题是,鉴于这是医疗保健行业,并非我们所有的客户都愿意将他们的数据库“移动”到我们的服务器上,这是可以接受的,并且会迫使我们在他们自己的服务器中安装网络服务器/数据库服务器服务器,所以他们有自己的副本。不是什么大问题(除非我们必须手动更新这些,但这不是问题,因为我们已经更新了 5 年的 win32 应用程序!)。

现在,回到主要的“问题”。

该团队几乎没有 Asp.NET 经验,我们在 ASP 2.0(1999/2000 年)中编写了很多程序,但那是 HTML+VBScript+CSS 的意大利面,所以我认为这不算数。在经历了所有这些经历(互联网泡沫!)之后,我们回到了 VB6,然后是 C#.NET 1x,你就知道剩下的故事了。我们是 WinForms 的一个小型 C# 开发团队。我们在上一次 .NET 3.5 中获得了一些 Linq To SQL 经验,我们很喜欢它。我们觉得它非常自然,非常“如果我们在五年前拥有这个……”就像。

鉴于这一切,重写应用程序并不是一项“简单的任务”(即使我们想在已知的 C#.NET 中完成也不是),这需要时间和计划,但我们可以用 5 年时间纠正数十个错误凭借使用该应用程序的经验,我们现在可以说我们对客户希望如何使用该软件以及我们在设计当前应用程序时(自己)创造了哪些限制有了更好的了解。应用程序和业务运作方式的所有“知识”都可以用于在设计、代码和可用性方面产生更好的应用程序。请记住,在 .NET 1.1 中我们甚至没有泛型!;) (你会看到很多 ArrayList 挂在这里)。

作为附加说明,我们使用 Crystal Reports(而且,像往常一样,我们讨厌它)。我们也不认为墨水控制是“必须的”。HTML/CSS 可以被塑造成我们想要的样子,尽管我们知道 HTML 不是 WinForms(因此有些东西不能被复制)。

你认为在 MVC(或 WebForms)中计划这个会太疯狂吗?我喜欢 MVC(类似 ruby​​ on rails)的想法(我从来没有在本书的基础知识之外使用 ruby​​ 进行编程),所以我们团队中没有人是专家,但我们总是可以学习和阅读。它一定不是“火箭科学”,不是吗?

我知道这整个问题可能有点主观,但是您会用新的 ASP/MVC/XXX Web 应用程序替换老化的 Winforms 应用程序吗?您是否有经验或尝试过(成功或失败)?

任何有助于更好地决定做什么的见解将不胜感激。

提前致谢!

更新:感谢所有回复的人,我们将评估这是否是一个好的举措,这确实是一项艰巨的工作,但我担心桌面应用程序正在变旧(使用旧的 net 1.1 hacks)而且它有在 Vista 和 W7 中或多或少地工作没有问题,恐怕未来的更新可能会破坏它。此外,应用程序的许多“或多或少核心”部分暴露了一些设计糟糕的想法,我们不得不到处破解以完成某些任务。部分缺乏经验,部分缺乏对业务运作方式的 100% 了解(以及客户不确定他们想要什么)。一个新的应用程序(以任何形式)将使我们能够在保留所有用户知识的同时创建更好的基础。但是,这是很多工作:) 所以我们将在这里考虑所有这些选项。正如你们中的一些人所提到的,

再次感谢大家!

4

3 回答 3

3

当您重新创建 Web 应用程序时,最好放弃重用桌面应用程序代码的所有努力。以下是原因:

  1. Web 应用程序,尤其是 asp.net 使用不同的模型。对于初学者来说,http 是无状态的。每次浏览器与服务器对话时,您必须显式发送当前页面上所有控件的当前内容。您不会在 Windows 应用程序中使用这样的模型。

  2. 为了减少网络负载,您需要优化视图状态的大小以及发出 http 请求的频率。同样,您现有的窗口应用程序没有任何此类规定。

  3. 更新视图。您可能有不同的事件处理程序、线程以及在您的 Windows 应用程序中没有的东西来更新不同场景中的 GUI。所有这些都需要更换。Javascript 是一种完全不同的动物。

  4. 安全。使用浏览器时,您对本地磁盘的访问受到高度限制,而在 Windows 应用程序中您会认为这是理所当然的。如果 Windows 应用程序中有任何代码需要本地资源,那么这对您来说将是一个麻烦点。

我会推荐以下内容:

  • 验证您当前的应用程序是否有任何本地磁盘访问要求(例如读取/写入本地文件等)。
  • 当您编写不同的 http 模块或处理程序时,您可以尝试利用现有 Windows 应用程序的一些后端/业务逻辑部分。
  • 考虑一下您的应用程序的哪一部分可以成为 Web 服务。
于 2009-09-07T17:43:56.830 回答
2

听起来应用程序需要大量重构才能清理它。如果您想迁移到 Web 模型,并最大限度地重复使用,您真的需要这样做。在您迁移到 Web 模型之前,我认为您需要了解是否可以在该模型中复制您的用户界面。从客户的角度来看,这是您的独特卖点吗?您希望这样的决策是用户驱动的,而不是纯粹的技术决策。

听起来您的应用程序是胖客户端应用程序的完美候选者,而不是最低公分母 Web 模型。

需要考虑的一些事项:

  • Web 界面将如何影响平板电脑的交互?
  • 网络版会给你带来哪些新客户?
  • 现有客户会放弃你的产品吗?
  • 您是否可以访问具有适当技能的顾问或外部资源来指导您进行网络技术?如果你不这样做,你可以依靠 StackOverflow 或其他网络资源来提供帮助。你需要一些好的指导和指导。
  • 如果您开始这项工作并且花费的时间比您预期的要长得多,会发生什么?您知道该应用程序,但听起来不像您了解网络。过去的经验表明,像这样的大规模重写可能会以灾难告终(一开始听起来从未如此困难)
  • 您能否在基于 Web 的版本中编写新功能?
  • 您能否迁移到 ClickOnce 部署以使应用程序更易于部署给客户。Web 的好处之一是更容易(零)部署。你能更接近那个吗?
  • 迁移到 WPF 并使用它创建浏览器应用程序会更容易吗?
  • Silverlight 或 Flex 可能是创建丰富体验的更好选择,并且可能更容易被 WinForms 开发人员接受。这是一种可能吗?
于 2009-09-07T18:18:43.437 回答
0

它看起来像你的应用程序。是最适合作为桌面应用程序的应用程序之一。尽管您希望您的用户能够访问您的应用程序。使用浏览器。

我建议尽可能重构,以便 GUI 变得更干净并且没有“代码”。完成此操作后,开始开发一个 asp.net mvc 应用程序,但保留您的桌面应用程序。您应该能够使用除 UI 层之外的所有层,使其更容易/更快/... 但是你知道网络,有点,你想要控制,所以 mvc 是要走的路。

于 2009-09-07T18:36:07.677 回答