65.9K
CodeProject 正在变化。 阅读更多。
Home

用于选择客户端应用程序正确类型的软件架构工具集

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.31/5 (8投票s)

2007 年 3 月 13 日

10分钟阅读

viewsIcon

40575

如何在 Web 应用程序或桌面应用程序、富互联网应用程序或智能客户端之间进行选择?

引言

本文讨论了一个重要问题,一个在 .NET 软件架构领域引起大量争议的问题。

选择什么:“Web 应用程序”还是“桌面应用程序”?富互联网应用程序还是智能客户端?

最近这个问题被频繁提出的原因在于,这两种技术越来越接近,当区别变得模糊时,决策就更难做出。例如,智能客户端引入了智能部署,减少了桌面应用程序最大的缺点之一。借助 Ajax,Web 应用程序运行速度更快,用户体验也得到了增强。

在我们开始之前,现在和在这里声明,上述定义的问题必须始终取决于业务问题,这一点很重要。

开发人员或架构师凭一时冲动选择技术将是一种不雅行为。技术也不应基于迂腐的专业精神来选择。许多公司选择技术是因为这是当前开发人员所了解和擅长的。选择正确的应用程序类型在许多业务中至关重要。最终用户和手头的业务问题,才是决策的主导者。

本文不涉及某个特定的业务问题。它讨论了每种方法的常见优缺点。

对话框

我选择以对话形式来面对这个问题。对话在两位软件架构师之间进行。

苏格拉底:Web 应用程序的倡导者,以及

柏拉图:桌面应用程序的倡导者。

对话形式让我不必表明立场。事实上,我没有立场。我认为这两种技术都很棒,当需要选择其中一种时,应该根据业务问题来决定。

非常欢迎您加入他们在现代希腊的一次 Tech-Ed .Net 研讨会上进行的(想象中的)辩论。

苏格拉底:
……但是柏拉图,你关于需要持续软件升级的主张只会强化我的论点,即 Web 应用程序是最好的技术。在 Web 应用程序中,应用程序实际上位于远程服务器上,你可以根据需要随时升级它,并且它会在线反映给你的用户。换句话说,当所有代码都在一个地方时,每个人都会看到最新版本。

柏拉图
嗯,借助 ClickOnce 技术,Windows 窗体应用程序可以从 Web 部署和启动。使用这种技术,软件升级从未如此易于维护。

苏格拉底
哦,我听说过它的功能,但是不是太麻烦了?你确实需要将所有程序集都设置为强名称,并且它在 Web 服务器上创建的文件夹和文件数量相当……嗯……麻烦。此外,如果用户不必安装,谁愿意在他的硬盘上安装桌面应用程序呢?

柏拉图
嗯,我想这项技术将来会由 Redmond 的狐狸改进。现在,用户可以在离线和在线执行之间进行选择。在这两种模式下,应用程序都安装在机器上。不同之处在于,在离线模式下,应用程序可以从桌面快速启动并更新,而在在线模式下,它只能像以前一样从网页链接运行。此外,请注意 ClickOnce 并不是唯一的解决方案。使用桌面应用程序与之通信、检查和安装更新的 Web 服务等“自制”解决方案也很容易开发。

苏格拉底
所以你基本上是说,在在线模式下,最接近运行 Web 应用程序,每次运行时应用程序都会重新安装。如果它是一个以兆字节计的大型应用程序呢?嗯,我亲爱的柏拉图,我保留我的看法。

柏拉图
不,你没有,因为存在某种缓存机制可以改善这种行为。我想,.Net Framework 只会下载所需的文件。

苏格拉底
嗯……你说了 .NET Framework。那我闻到空气中有软件先决条件的味道了吗?

柏拉图
你闻得真好,但请理解用户不必在他的计算机上安装 .NET 框架,或者必须手动预安装它。已部署的 ClickOnce 应用程序可以轻松定义为支持 .NET 框架的安装(引导程序)。亲爱的苏格拉底,你很清楚 Web 应用程序通常需要安装 ActiveX 吗?这些要求通常会吓到用户,因为它们通常会导致 Web 浏览器显示恐吓性的安全警告。



苏格拉底
嗯,你说得对;今天的网络浏览器确实给我们带来了很多麻烦。但是,Windows 防火墙对桌面应用程序也常常如此。

柏拉图
在桌面应用程序中,与网络浏览器相反,应用程序拥有从登录用户处获得的权限。它可以访问系统数据,如 IP 地址、注册表、文件、Windows Shell 集成等。在脚本模式下,Web 应用程序受到严格限制,ActiveX 技术是最后的手段之一。Web 应用程序也无法利用本地资源,如 CPU 或已安装的软件。此外,ActiveX 在 Web 应用程序中不也用于增强图形功能,如图表、地图等吗?

苏格拉底
嗯,这取决于 Web 应用程序需要做什么。但是,是的,它通常用于更复杂和更花哨的 UI 控件。

柏拉图
我想您也会同意,Web 应用程序永远无法支持像桌面应用程序那样的 GUI 和可视化功能。例如,用户界面必须在 Web 上来回传输才能刷新。

苏格拉底
我不会说总是如此。例如,AJAX 增强了 UI 功能。

柏拉图
AJAX 也增加了大量的客户端脚本代码,这会损害性能并影响用户体验。有了 AJAX,Web 应用程序不再是“瘦”应用程序,而是开始变得“胖”。说到脚本,客户端和服务器端脚本语言(如 VB 和 JavaScript)的调试功能是不是不可能的?用这种脚本语言进行开发是不是也很笨拙?

苏格拉底
在今天的 ASP.NET 技术中,服务器端代码(后台代码)可以用高级语言(任何 .NET 感知语言)编写,当然可以进行调试。至于客户端和服务器端脚本,恐怕你说得对。

柏拉图,如果允许的话,我想谈谈应用程序可用性。你还记得,在 Web 应用程序中,应用程序是可用的,并且可以在任何地方访问,而无需在客户端机器上安装任何东西。例如,Gmail 是一个基于 Web 的电子邮件应用程序。无论你身在何处,都可以进入你的收件箱。如果你进入一家网吧,你肯定会被允许进入 Gmail,但不能在该机器上安装任何应用程序。



柏拉图
是的,我明白你的意思。但是,如果我在家或办公室想查看我的电子邮件,但 Gmail 服务器宕机或我暂时失去了互联网连接,我就无法查看我的电子邮件,对吗?Web 应用程序必须始终连接到服务器。换句话说,桌面应用程序提供了更好的离线和缓存功能。无需浪费时间等待屏幕刷新或网络可用。



与此相反



苏格拉底
嗯,如果您需要智能缓存和离线功能,那么您是对的。我想提及的另一件事是跨平台能力。如果您的桌面应用程序面向全球使用,您能在 Linux 和 Windows 操作系统上安装它吗?即使您决定只支持 Windows 操作系统家族,您仍然需要支持和测试您的应用程序在许多版本上,例如:98/ME/NT/2000/2003/XP/Vista。

不包括家庭版和专业版等子版本。您很快就会发现上述操作系统支持不同的 API 并表现不同。对于 Web 应用程序,您运行在一个经过充分测试的应用程序(如 IE)中,该应用程序已在这些操作系统上进行过测试。Web 浏览器也致力于 HTML 和 Java 脚本解释等标准。因此,只要您坚持标准,就不会有问题。

柏拉图
一开始,你几乎说服了我,但后来我发现有很多网络浏览器供应商和很多网络浏览器版本。还有很多技术,如 ActiveX 和 Flash,在 Mac 网络浏览器上无法工作。尽管如此,如果你说的 Web 应用程序足够简单,那么支持全球用户会更容易,你是对的。

苏格拉底
嗯,使用像 HTML 这样的标记语言也具有很多简单性和灵活性。

柏拉图
这是真的!但与此同时,它也非常有限。借助 XAML 标记语言,桌面应用程序也像 HTML 一样享有灵活性,而且 UI 功能更强大。

苏格拉底
好的,柏拉图,我们的辩论还远未结束,但我确实需要走了。我与色诺芬在当地的水疗中心有一个约会。

柏拉图
再见!苏格拉底。代我问好。

未来会怎样?

很难说未来会怎样。一个人必须是预言家才能说出来。我猜测,我们将在很长一段时间内,至少在不远的将来,面临文章中的问题。

审视像 SmartClient 和 AJAX 这样全新的开发风格,会让你觉得过去几年并没有取得什么革命性的进步。

“……AJAX 不是一种新的编程语言,而是一种使用现有标准的新方式。”(https://w3schools.org.cn/ajax/default.asp)

“……智能客户端不是一项技术,也不是任何特定的架构。它是一种应用程序风格,它结合了桌面应用程序和 Web 应用程序的最佳优点。”(http://msdn.microsoft.com/smartclient/community/scfaq/default.aspx)

一些常用技术确实非常古老

智能客户端 vs. 富互联网应用 (RIA)

“富互联网应用程序 (RIA) 是具有传统桌面应用程序特性和功能的网络应用程序。RIA 通常将用户界面所需的处理转移到 Web 客户端,但将大部分数据(即维护程序状态、数据等)保留在应用程序服务器上。( http://en.wikipedia.org/wiki/Rich_Internet_application )

富互联网应用程序已经到来。Google 是富互联网应用程序领域的全球领导者之一。以下是一些例子:Gmail、Google 日历以及 Google 文档和表格。

富互联网应用程序的特点

  • 在网络浏览器中运行
  • 通常比标准 Web 应用程序响应速度快得多
  • 更丰富的用户界面
  • 具有桌面应用程序的外观和感觉

智能客户端特性

  • 通过网络交付
  • 无需安装
  • 无需用户操作即可自动更新

趋势

  • 应用复杂性日益增加
  • 连接性和网络感知 - 不同类型的应用程序连接到相同的数据源。从移动设备、办公室的桌面应用程序以及不在办公室时通过网络连接到数据
  • A2A – 类似于 B2B,只不过应用程序可以使用蓝牙等标准进行通信,适用于移动设备。
  • 在线保存数据 - 例如,Google 书签和 MS Messenger 将用户信息(如收藏夹)保存在网络上。这允许用户从不同的 PC 查看存储的数据。
  • 应用程序恢复 – 无论上次应用程序运行发生了什么,都能恢复到之前的状态。

摘要

选择正确的技术必须锚定于手头的业务问题。

您不会将像 MS-Visio 这样的绘图应用程序开发成 Web 应用程序,就像您不会为 Amazon 书店选择桌面应用程序一样。

本文描述了每种技术的一些优缺点。了解它们是做出决策的一个良好开端。

深入阅读

© . All rights reserved.