Web窗体/ MVC到Windows窗体程序员

问题描述:

首先我想说清楚,我不是在寻找“我的技术比你的更好”类型的帖子;这是一个真实的案例,我一直在面对这个决定。考虑到这一点,让我解释一下:Web窗体/ MVC到Windows窗体程序员

我们有一个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年前的祝福!)。

因为我们使用完全gdi +自定义控件的90%,所以我们的表示层winforms“很好看”。 (只要有可能,无需破解WinAPi)。该应用程序是基于触摸的(即:它使用墨水,但不依赖于此),但按钮,标签等等,一切都是“设计”用于触觉设备。 (TabletPC或触摸屏)。当然有些用户使用键盘/鼠标。我们正考虑重写应用程序,但使用Web技术的可能性,考虑到所有这些,以及所有这些web2.0和互联网fuzz(加上Jeff的帖子;))。 这个想法显然为我们的客户带来了更多的可用性(他们可以随时随地使用系统)以及更少的维护(我们可以升级,并且可以立即升级),等等。互联网vs WinApp thingy。

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

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

这个团队很少有Asp.NET的经验,我们在ASP 2.0(1999/2000)中做了很多程序,但那是HTML + VBScript + CSS的意大利面,所以我认为它不重要。经历了所有这些经历(互联网泡沫!)后,我们回到了VB6,然后是C#.NET 1x,并且您知道故事的其余部分。我们是WinForms的C#开发小组。我们在最后的.NET 3.5中获得了一些Linq To SQL Experience,我们很喜欢它。我们觉得这非常自然,非常“如果我们五年前会这样......”就像。因为所有这些,重写应用程序并不是一个“简单的任务”(即使我们想在已知的C#.NET中执行它),也需要时间和计划,但是我们可以纠正几十个错误并且在应用程序方面拥有5年的经验,我们现在可以说我们对客户如何使用该软件有更好的了解,以及我们在设计当前应用程序时创建了什么限制(我们自己)。 应用程序和业务工作方式的所有“知识”可用于在设计,代码和可用性方面产生更好的应用程序。记住在.NET 1.1中我们甚至没有泛型!;)(你会看到很多ArrayList挂在这里)。作为补充说明,我们使用Crystal Reports(和往常一样,我们讨厌它)。我们不认为墨水控制也是“必须的”。尽管我们知道HTML不是WinForms(因此有些东西不能被复制),但HTML/CSS可以被塑造成我们想要的样子。

您是否认为在MVC(或WebForms)中计划这太疯狂了? 我喜欢MVC(ruby on rails like)这个想法(我从未在本书的基础知识之外对ruby进行过编程),所以我们团队中没有人是专家,但我们总是可以学习和阅读。它不应该是“火箭科学”,它必须吗?

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

任何洞察力,帮助使用更好地决定做什么,将不胜感激。

在此先感谢!

UPDATE:感谢所有回应,我们会评估这是否是一个好的举措,它肯定是一个工作,但恐怕桌面应用程序正在变老(使用旧网1.1 hacks),而且它已经或多或少地在Vista和W7中没有问题的工作,恐怕未来的更新可能会打破它。另外,应用程序中的许多“或多或少的核心”部分都暴露了一些设计错误的想法,我们不得不在这里和那里进行攻击来完成某些任务。缺乏经验的部分,部分缺乏关于业务如何运作的100%知识(以及客户不确定他们想要什么)。 新的应用程序(以任何形式)将允许我们创建一个更好的基础,同时保留所有的用户知识。但是,这是工作的一部分:)所以我们会在这里考虑所有这些选项。 正如你们中的一些人所提到的那样,也许更细的客户端和一些(ab)使用WCF在这里或那里可能会更合适。

再次感谢所有人!

当您重新创建Web应用程序时,最好尽力重新使用桌面应用程序代码。以下是原因:

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

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

  3. 正在更新视图。您可能有不同的事件处理程序,线程以及不在您的Windows应用程序中用于在不同情况下更新GUI的内容。所有这些都需要被替换。 Javascript是一个完全不同的动物。

  4. 安全。在使用浏览器时,您对本地磁盘的访问受到很大限制,而您将在Windows应用程序中采用相同的设置。如果在Windows应用程序中有任何需要本地资源的代码,那么这对你来说将是一个麻烦点。

我想提出以下建议:

  • 验证,如果当前的应用程序有任何本地磁盘的访问需求(例如读取到本地文件/写等)。
  • 在编写不同的http模块或处理程序时,可以尝试利用现有windows应用程序的一些后端/业务逻辑部分。
  • 请仔细考虑应用程序的哪些部分可以成为Web服务。
+0

+1提到HTTP是无状态的 – jao 2009-09-07 18:23:38

+0

由于这是第一个答案,它提供了很好的信息,我接受它,但所有其他人都表示赞赏。可悲的是*只处理整数的答案,我们不能提供两个很好的答案:S – 2009-09-09 10:12:35

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

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

有些事情要考虑:

  • 如何将Web界面冲击平板互动?
  • 什么新客户将有一个网络版带给你?
  • 现有客户是否会放弃您的产品?
  • 您是否有权使用咨询顾问或具有合适技能的外部资源来指导您使用网络技术?如果你不这样做,你可以依靠*或其他Web资源来提供帮助。你需要一些良好的指导和指导。
  • 如果你开始这项工作会发生什么,它会比预期花费更多时间?你知道这个应用程序,但听起来并不像你所了解的那样。过去的经验表明,像这样的大规模重写可能会在灾难中结束(从一开始听起来就不那么困难)
  • 您可以在基于Web的版本中编写新功能吗?
  • 您是否可以迁移到ClickOnce部署以使应用程序更易于部署给客户。网络的好处之一是更容易(零)部署。你能接近吗?
  • 迁移到WPF并创建一个浏览器应用程序会更容易吗?
  • Silverlight或Flex可能是创建丰富体验的更好选择,对于WinForms开发人员来说可能更易于使用。这有可能吗?
+0

伟大的观点布赖恩,将考虑到他们。谢谢。 – 2009-09-09 10:13:39

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

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