代码之家  ›  专栏  ›  技术社区  ›  Martin Marconcini

WebForms/MVC到Windows窗体程序员

  •  1
  • Martin Marconcini  · 技术社区  · 15 年前

    首先,我想说清楚,我不是在找一个“我的技术比你的更好”的职位;这是一个真实的情况,我已经面临这个决定。考虑到这一点,让我来解释一下:

    我们有一个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年前的老摇滚乐。我们对数据对象使用了温柔的.net(旧的,现在还没有维护过)(这是5年前的福祉!).

    我们的表示层WinForms是“好看的”,因为我们使用了90%的完全gdi+自定义控件。(只要可能,不必破解winapi)。该应用程序是基于触摸的(即:它使用墨水,但不依赖于墨水),但是按钮、标签等,一切都是“设计”来与触觉设备一起使用的。(TableTPC或触摸屏)。当然,有些用户使用键盘/鼠标。

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

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

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

    这个团队几乎没有ASP.NET的经验,我们在ASP 2.0(1999/2000年)中做了很多编程,但是那是一个由HTML+VBScript+CSS组成的意大利面,所以我认为它不重要。在经历了这些之后(互联网泡沫!)我们回到vb6,然后是c.net 1X,你知道故事的其余部分。我们是WinForms的C开发人员小组。我们在上一次.NET3.5旅行中获得了一些linq-to-sql的经验,并且我们喜欢它。我们觉得这很自然,很“如果我们五年前就有了这个”的感觉。

    考虑到所有这些,重写应用程序不是一项“简单的任务”(即使我们想在已经知道的c.net中完成它也不是),这需要时间和计划,但是我们可以纠正几十个错误,并且凭借5年的应用程序工作经验,我们现在可以说我们对客户使用SOF的方式有了更好的了解。Tware和我们在设计当前应用程序时(自己)创造了哪些限制。 所有关于应用程序和业务工作方式的“知识”都可以应用于在设计、代码和可用性方面产生更好的应用程序。记住在.NET 1.1中,我们甚至没有泛型!(你会看到很多阵列列表在这里徘徊)。

    作为补充说明,我们使用Crystal Reports(和往常一样,我们讨厌它)。我们也不认为墨水控制是“必须”的。虽然我们知道HTML不是WinForms(因此有些东西无法复制),但是HTML/CSS的形状可以按照我们想要的方式来设计。

    你认为用MVC(或webforms)来计划这件事太疯狂了吗? 我喜欢MVC(RubyonRails-Like)的想法(我从来没有用Ruby编写过超越本书基础的程序),所以我们团队中没有人是专家,但我们总是可以学习和阅读。它不能是“火箭科学”,对吧?

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

    任何帮助用户更好地决定要做什么的见解都将受到赞赏。

    事先谢谢!

    更新 :感谢所有回应者,我们将评估这是否是一个好的举动,这确实是一个地狱般的工作,但我担心桌面应用程序正在变老(使用旧的NET 1.1黑客),而且它或多或少地工作,在Vista和W7中没有问题,我担心未来的更新可能会破坏它。 此外,应用程序的许多“或多或少的核心”部分都暴露了一些设计不当的想法,我们不得不到处进行黑客攻击以完成某些任务。一方面缺乏经验,另一方面缺乏100%的业务运作知识(客户不确定他们想要什么)。 一个新的应用(以任何形式)将允许我们创建更好的基础,同时保留所有用户知识。 但是,这是一个很大的工作:)所以我们将在这里考虑所有这些选项。 正如你们中的一些人所提到的,可能是一个更瘦的客户机和一些(ab)在这里使用wcf,可能会更合适。

    再次感谢大家!

    3 回复  |  直到 15 年前
        1
  •  3
  •   Sesh    15 年前

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

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

    2. 要减少网络上的负载,您需要优化viewstate的大小和发出HTTP请求的频率。同样,您现有的Windows应用程序没有任何此类规定。

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

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

    我建议如下:

    • 验证当前应用程序是否有任何本地磁盘访问要求(例如,对本地文件的读/写等)。
    • 在编写不同的HTTP模块或处理程序时,可以尝试利用现有Windows应用程序的一些后端/业务逻辑部分。
    • 考虑一下应用程序的哪些部分可以成为Web服务。
        2
  •  2
  •   Brian Lyttle    15 年前

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

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

    需要考虑的一些事项:

    • Web界面将如何影响平板电脑交互?
    • 有什么新客户会有一个网络版本带给你?
    • 现有客户会放弃您的产品吗?
    • 您是否可以接触到具有正确技能的顾问或外部资源来指导您使用Web技术?如果没有,可以依靠stackoverflow或其他Web资源来提供帮助。你需要一些很好的指导和指导。
    • 如果你开始这项工作的时间比你预期的要长,会发生什么?你知道这个应用程序,但听起来不像你了解网络。过去的经验表明,像这样的大规模重写可能会以灾难告终(一开始听起来从未如此困难)
    • 你能在基于Web的版本中编写新功能吗?
    • 您是否可以转到ClickOnce部署,使应用程序更容易部署到客户身上?Web的好处之一是更容易(零)部署。你能再靠近一点吗?
    • 迁移到WPF并用它创建浏览器应用程序会更容易吗?
    • Silverlight或Flex可能是创建丰富体验的更好选择,对WinForms开发人员来说可能更容易接近。这有可能吗?
        3
  •  0
  •   Svante Svenson    15 年前

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

    我建议尽可能多地重构,以便GUI变得更干净,并且没有“代码”。 完成后,开始开发ASP.NET MVC应用程序,但保留桌面应用程序。您应该能够使用除UI层之外的所有层,使其更容易/更快。既然MVC已经存在,我想说WebForms更多的是让非Web开发人员做Web。但是你知道网络,有点,你想要控制,所以MVC是你的选择。