首先我想明确一点,我不是在寻找“我的技术比你的好”的帖子;这是一个真实的案例,我一直面临着这个决定。考虑到这一点,让我解释一下:
我们有一个 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% 了解(以及客户不确定他们想要什么)。一个新的应用程序(以任何形式)将使我们能够在保留所有用户知识的同时创建更好的基础。但是,这是很多工作:) 所以我们将在这里考虑所有这些选项。正如你们中的一些人所提到的,
再次感谢大家!