我们目前有一个非常复杂的业务应用程序,其中包含大量用于创建用户界面的JavaScript代码。交互感觉尽可能接近传统桌面应用程序(因为这是我们的用户想要的)。多年来,这个Javascript代码已经发展壮大,难以管理和扩展。维持并使得添加新功能更有可能打破现有功能。毋庸置疑,此代码中的许多代码也不再是现有技术。
因此,我们正在讨论是否应该在Flex或Silverlight中重新编写应用程序的客户端部分,或者使用jQuery等一些最新的JavaScript框架重新编写,或者我们是否应该继续用我们拥有的东西逐步尝试替换现有代码中最糟糕的部分。更难以决定的是,重新编写UI可能会花费我们6-12个月的时间。
我想听听你对这个问题的想法(也许你们中的一些人已经做过类似的决定)。
编辑:回答一些提出答案的问题:后端代码是用C#编写的,目标受众是(通常)非技术用户,来自我们销售软件的公司(不是一般公众,但不是严格的内部用户),软件“只”必须在桌面浏览器中运行,但不一定在移动设备上运行,客户端应用程序是一个完整的用户界面。
答案 0 :(得分:15)
老实说,我会重构旧的JavaScript代码而不是重写应用程序。既然你在询问将它放在哪个平台上,我猜你的团队并不是他们中的任何一个专家(不会抨击团队,这只是一个简单的事实,你必须在做出决定时考虑)。这将对您不利,因为您将进行双重任务重写并学习如何在新平台上执行操作。
通过将其保留在JavaScript中,您可以慢慢地引入一个框架,如果您选择并迭代地执行(替换代码部分,测试它,释放它,并修复任何错误)。这将允许您以较慢的速度执行此操作并获得反馈。也就是说,如果项目在中途被取消,那么你并没有完成所有的工作,因为最终用户正在使用更新的代码。记住瀑布模型,这基本上是完全交换的几乎永远不会起作用。
尽管我不愿承认这一点,因为对于开发人员来说,它总是最有趣的,转移平台,并且一次取代整个系统很少有效。有无数的例子,Netscape一个。 Here is the post from Spolsky on it.(我还会推荐这本书Dreaming in Code。这是一个失败的软件项目以及如何和为什么这样做的一个很好的例子)。记住要从头开始重写一个系统,你基本上必须经历每一行代码并弄清楚它的作用和原因。起初你认为你可以跳过它,但最终归结为此。就像你说的那样,你的代码已经过时了,这意味着它很可能会完成任务。其中一些你可以忽略,其他人会,“我不知道系统需要这样做。”
答案 1 :(得分:5)
这个决定通常不是关于技术,更多是关于你的技能和舒适区。
如果你有人吃饭和呼吸Javascript,但对.net或Flash / Flex一无所知,那么坚持使用Javascript并依赖jQuery或Prototype等库是没有错的。
如果你有其他任何一个技能,那么你可以使用Silverlight或Flex获得更快的结果,因为你可以“免费”获得很多功能。
答案 2 :(得分:5)
这些事情让人想起:
但当然Javascript有很多东西,并且有很多Javascript框架1。最重要的分隔符是您的意图是“装饰”一组网页,还是需要一整套小部件来在Web上创建类似桌面的应用程序。你的问题表明它是后者。
因此 - 我可能会因为这样说而被低估 - 我不认为jQuery是答案,我说这是喜欢jQuery的人。 jQuery(imho)非常适合增强Web页面和抽象的跨浏览器低级功能,但对于复杂的UI开发人员来说,最重要的因素是:
关于小部件的全部内容。
是的,我知道jQuery UI但是在小部件方面它比其他人更稀疏。我建议你看看一些框架的示例和小部件库:
其他(jQuery,Dojo,Mootools,Prototype)更“紧凑”的框架可能不太适合您的目的。
在做出决定时,请考虑每个框架的许可。
我对以上三点的看法是:
您的决定应基于您如何“免费”获得尽可能多的申请。您不希望花费宝贵的开发人员时间来执行以下操作:
我会认真考虑以上三种中的一种作为你前进的道路。
答案 3 :(得分:4)
我对这个问题的看法非常简单:除非应用程序需要公开访问,除非需要对搜索引擎进行优化和查找,并且/或者有一个其他令人信服的案例,因为它必须保持严格基于文本,然后将芯片堆叠起来,支持富客户端运行时,如Flash或Silverlight。
一个很大的原因,即使不是最大的原因,是它们消除了为多个浏览器和平台开发的复杂性。再次:他们消除运行时环境变量。不再需要调试Netscape和IE的旧版本,不再需要对象检测和随后的分支,不再需要古怪的CSS hacks - 一个代码库,而且你已经完成了。将运行时环境卸载到Adobe或Microsoft将节省您的时间,金钱和头痛,其他条件相同。 (当然,有YUI,JQuery等,但它们并没有消除那个变量 - 它们只是抽象它。而且它们也不抽象它的所有 - 只是它的一部分;最终,你仍然需要测试,调试,重新测试,调试,重复。)
当然,你现在的代码库问题使你的情况变得更加复杂,而且很难明确地说出你应该采用哪种方式,因为只有你有代码,而我们只是极客有意见。但是假设,仅仅通过你提出这个问题,你现有代码库的重构将涉及一个足够重要的事业,以保证即使考虑一种替代(也可能是相对外国的)技术,它听起来就是这样,那么我的回答是你的好奇心很好,在做出决定之前你应该认真对待他们。
就我而言,在过去的几年里,我是一个长期服务器端的人,ASP.NET / C#,我在我的时代写了很多基于文本的业务线应用程序,最后一个很少有人强调使用JavaScript提供丰富的soverign用户界面。我最近几年也一直专注于Flex。我有两个世界的经验。我现在可以毫不犹豫地告诉你,击败Flex 是其他人的工作:它只是一款功能多样且功能多样的产品,而且对于业务线应用来说,它仍然是前所未有的突飞猛进Silverlight。我不能高度推荐它;数据绑定和事件处理功能本身就是令人难以置信的节省时间,更不用说你对布局,动画等的完全自由了。列表还在继续。
所以,我的建议是:仔细观察Flex 。最后,你可能会发现一个基础改写太过庞大,无法证明这一点,这很好 - 只有你能做出决定。 (公平地说,你就像使用JavaScript项目那样制作一个混乱的Flex项目的能力 - 我知道。我已经完成了。)但是所有人都说,Flex可能是最少的 - 目前限制,最灵活,功能最丰富,最具生产力的选项,所以它当然值得考虑。祝你好运!
答案 4 :(得分:2)
你所开发的任何javascript'多年'可能看起来不像今天的可能。毫无疑问,你有很多有用的代码。不过。所以我的建议是使用jQuery在javascript中重写并使用一个可用的GUI附加组件,或许看看Yahoos的东西。您还将以这种方式定位最广泛的受众群体。
答案 5 :(得分:1)
GUI技术首先应由目标受众决定。例如,如果您定位englobes iPhone用户,我不会推荐Flex,因为iPhone目前没有Flash播放器。
请记住,如果您切换到像Silverlight这样的完整的GUI工具包,您的用户可能会发现L& F不自然,因为通常的请求 - 回复周期对于客户端框架来说并不那么明显。
在那之后,您的开发人员应该说一句话。每个工具包都需要维护,如果您要切换到一个全新的工具包,开发人员将不得不熟悉新的工具包,这可能是昂贵的。
我的建议是你坚持使用javascript,因为你的开发人员熟悉它,并逐渐用新的工具包替换旧的javascript,如原型,jQuery或任何其他工具包。您可能会使用最先进的工具包更快地重做一些旧的东西。请记住,您可以使用任何内容构建漂亮的应用程序。
答案 6 :(得分:1)
检查此comparison table以获取Flex与Javascript:
答案 7 :(得分:1)
我们在服务器上使用带有C#的EXTJS和一些C ++开发了一个非常丰富的应用程序。我们不仅让客户对桌面浏览器中的界面感到满意,而且对Javascript的调整很少,我们能够提供Web浏览器支持。此外,由于他们的现场工作人员在网吧使用自助服务终端(其中许多没有安装Flash,请忘记Silverlight!),我们在第三世界国家/地区的客户无法使用Flash或Silverlight应用程序。我认为这些问题和其他问题弥补了在javascript中编写复杂应用程序的难度......