开发Web应用程序与桌面应用程序有什么好处和挑战?

时间:2009-04-25 12:11:52

标签: user-interface

我与管理人员有一些问题,因为他们认为(直观地)创建桌面应用程序比创建Web应用程序更容易(因为您的约束较少)。但在我看来,由于某些原因,它更难:

  • 桌面应用的文献远小于网络应用
  • 编码面板和按钮比使用声明式方法(HTML)更难
  • http的无状态特性迫使您以请求/响应方式重新思考

我正在寻找GUI与桌面应用程序的可靠推理。我坚信台式机很难开发,因为我有一些工具包的经验,但如果有人在乎其他方面做出反应,请随意为你的推理做好基础。


修改:我恢复了我原来的问题,因为有人编辑了它并丢失了原始内容。如果有人选择编辑问题,请发表一些有意义的评论,这样我至少可以知道为什么某些部分已被更改。

14 个答案:

答案 0 :(得分:18)

大多数答案(到目前为止,无论如何)似乎都关注实施选择的难易程度。应用程序,桌面或基于Web的整个目标都是为最终用户服务。 必须是讨论的起点。

在大多数情况下,Web应用程序无法提供与桌面应用程序一样丰富的交互式体验。由于可用的小部件,网络延迟,您的应用程序窗口必须(通常)存在于另一个应用程序中等等,因此存在太多限制。

话虽如此,很多时候界面不需要大量的小部件,网络延迟也不是问题,从浏览器窗口运行是一个优势。 gmail和堆栈溢出是基于Web的应用程序的主要示例,不需要特别丰富的界面。

因此,在尝试决定使用哪种技术时首先要考虑用户。他们需要高性能,丰富的用户界面吗?他们是否需要能够毫不费力地与网络上的其他人分享他们的数据?这是一个应用程序,他们将每天使用8小时或只是偶尔使用?他们是否主要使用它来编辑本地文件或通过网络与人协作?

对于那些说“网络应用总是更好”的人,让我问你这个问题:想想你每天使用的工具。您的文本编辑器,编程IDE,浏览器,电子邮件客户端。哪些是网络应用程序?可能没有,除了你的电子邮件客户端。这就是为什么你不想要一个基于Web的IDE来编写软件(或者写一本书,或者进行严肃的图像处理)的原因。

这一切都归结为用户以及他们的目标。有时,他们的需求最好通过基于Web的UI来满足,有时使用桌面UI。有时会这样做。当然,您还需要权衡分配和更新,跨平台可用性等选项,但这一切都始于用户及其目标。如果你专注于满足你的最终用户,答案可能会变得相当明显。

答案 1 :(得分:9)

恕我直言Web开发更具压力......您必须与Internet Explorer不符合标准,慢速连接,奇怪的CSS行为,浏览器漏洞利用。

答案 2 :(得分:6)

大多数时候开发网络应用程序要容易得多,并且导致一个大问题 - 部署和推出新版本,就会消失。

您不必处理不同的操作系统版本,已安装的库,注册表,COM等。您可以使用不同的浏览器进行处理,但它的处理要少得多。

我无法想象每个月会向2-3百万客户端部署桌面应用程序 - 这对于网站来说效果很好。

对于Web开发的开发,你有:

  • 更短的执行路径
  • 少管理的状态
  • 你自己几乎不必处理并行问题
  • 要管理的资源少或没有资源 - 没有操作系统处理

唯一的缺点是设置开发机器通常需要更多,并且Web应用程序的调试更难。使用当前的工具状态,调试不再是一个问题。

如果可能的话,总是更喜欢网络应用。

答案 3 :(得分:4)

我认为网络更难,你必须担心状态,网络,并且更加关注加载,安全性等事情。噩梦是浏览器兼容性,AJax,CSS arrghhh。

OTOH因为桌面边界较少可能设计明智,因为你有更多的功能稍微有点难度 - 我不同意这一点。

答案 4 :(得分:4)

两者之间存在很多差异,这些差异会带来挑战或好处。对于Web应用程序:

  • 状态 - HTTP请求没有状态,需要通过在所有请求或Cookie中传递会话变量来进行管理。这是Web应用程序的开销,ASP.NET经常受到大量会话数据的攻击。<​​/ li>
  • 集中化 - 将更改推送到Web应用程序就像更新服务器上的位而非必须向所有用户推出补丁的桌面应用程序一样简单。集中化的特性也使分析等更容易。这是一个很大的便利。我记得GMail曾在一个小时内修复了一个安全漏洞。相比之下,仍有大量易受攻击的未打补丁的Windows机器。
  • 架构 - 胖服务器,瘦客户端使Web应用程序平台无关。它还有助于管理平衡......例如,表格排序,错误检查,数学计算或图形(例如在闪存的情况下)可以在客户端或服务器上完成,具体取决于资源的分配。由于瘦客户端,这意味着可以彻底检修服务器而不会影响客户端。这种灵活性非常方便。
  • 安全性 - 桌面应用程序在受信任的环境中运行,在这种环境中,当Web应用程序在沙盒环境中运行时,它们可以自由地执行任何操作,从而使客户端本身更安全。但是,Web应用程序需要一些配置,因为它与证书,activex控件等有关。
  • 版本控制 - 桌面应用程序的版本控制成本要高得多。这可以追溯到推动变革的更乏味的过程。然后,跳过主要版本号意味着通过用户升级增加收入。在Web应用程序中,版本控制主要面向开发人员自己,并且更容易进行小的迭代增强。这就是为什么桌面应用程序仍然遵循瀑布式开发周期的原因,因为推出变更代价高昂,而且必须首次获得它。桌面应用程序还具有向后兼容的成本,例如支持Windows 98,XP和Vista或支持旧处理器,驱动程序等。
  • 环境 - Web应用程序在可预测的环境中运行,这也非常方便。 IE / FF / Opera等之间存在跨浏览器开发问题,但测试和调试比在具有不同图形处理器,防病毒软件或构建的桌面系统上运行复杂应用程序要容易得多。
  • 响应能力 - 由于回发,Web应用程序的响应速度较慢,但​​AJAX使这更容易,更有趣。

我确信我还有很多其他要点,但这是我对Web应用程序开发的偏见。

答案 5 :(得分:2)

我认为每个人都有自己的大规模并发症,这使他们面临独特的挑战,你会根据你的要求得到不同的答案。 Web程序员可能认为桌面应用程序比Web项目更难,因为不熟悉介质。

桌面用户可能会发现Web应用程序更难编写代码,因为他们必须考虑使用CSS和使用AJAX协议进行通信的更多设计问题。

答案 6 :(得分:2)

我非常怀疑网络程序员需要知道winapi。我说GUI编程需要更多的时间来学习。

答案 7 :(得分:2)

根据我的经验,Web开发更难,您无法轻松维护状态;另外你必须处理格式问题(css很棒,但很难掌握)。

答案 8 :(得分:2)

我可以在我的日常工作中开展工作,并且老实说,开发桌面应用程序的唯一合理理由是因为用户不会一直连接。

分发/维护桌面应用程序时遇到的问题始终依赖于用户,而Web应用程序可以在没有用户参与的情况下进行调试。这永远不应该被最小化,因为它可能需要花费过多的时间来调试Idaho中的一个用户没有其他用户拥有的缺陷。

两者的发展需要不同的心态。 Web本质上是无状态的,桌面是有状态的。当我在两者之间切换时,我常常感到沮丧,因为我习惯了一个,然后在另一个中尝试相同的模式/技术,它就失败了。

最终,这取决于您要解决的问题。如果您无法站起来,那么您的选项将受到限制。如果您希望用户在西弗吉尼亚州的诡计中使用它,那么您几乎没有选择。

问题中的更多信息会有所帮助,因为这个问题几乎无法覆盖。

答案 9 :(得分:2)

哇,到目前为止我对答案感到惊讶。我已经完成了两个,过去的桌面和几乎所有的网络。我发现Web开发更容易开发,更容易支持,更容易推出和部署。

如果有可能在网上做这件事,我绝不会选择在桌面上开发一些东西。

答案 10 :(得分:2)

桌面应用程序是可行的方法。当前的Web技术(HTML,Javascript,HTTP,...)从未考虑过应用程序而设计。它是专为文档而设计的。你会感觉到你编写的每一行代码。

答案 11 :(得分:1)

使用桌面应用程序,您不必像在Web上那样处理应用程序状态等问题。 HTTP是无状态协议,因此开发人员的工作是确定如何维护用户会话的应用程序的当前状态。桌面可以使用TCP / IP并维护与服务器的连接。

通过网络,可以非常轻松地创建引人注目的用户界面,因为您可以使用Javascript,Flash等添加动画。当应用程序以数据为中心并且应用程序状态是一个问题时,开发人员需要做更多的工作

答案 12 :(得分:1)

一切都取决于:

  1. 您的开发者体验是什么?
  2. 您需要做什么类型的应用程序?
  3. 还有 - 您所谓的网络应用程序? Silverlight或Flash应用程序都可以这样完成,您可以从桌面或浏览器中使用它。今天的Ajax应用程序与桌面应用程序没什么不同,但是用DHTML开发一些不太简单的东西要困难得多(即使你正在使用像jQuery甚至GWT这样的框架)。

    假设HTML或DHTML为Web应用程序:

    我在web / ajax和桌面开发上花了很多年,我的经验是平等的 - 我已经完成了大量复杂的Web应用程序和桌面应用程序。拥有C#的良好工具包和工具以及足够的经验,我可以在相同或更短的时间内创建比Web服务更好的桌面应用程序。但是某些类型的应用程序不能作为桌面来完成,因为它需要将它们作为Web应用程序来完成。

    桌面开发更简单的原因:

    1. 语言类型安全,代码提示
    2. 代码x10-1000 +性能分析器的性能
    3. 无需检查所有浏览器中的所有内容
    4. 使用堆栈跟踪,编辑和继续的信息性异常
    5. 能够使用多线程(如果您知道如何使用它)
    6. 代码的总体可预测性和稳定性
    7. RAD工具
    8. 很长一段时间以来,网络应用的几个优点是:

      1. GUI框架 - HTML + CSS
      2. 用户更容易开始使用
      3. 搜索引擎可以找到应用程序的内容
      4. 现在我们都拥有强大的GUI框架,如XAML for WPF / Silverlight应用程序。 Silverlight / Flash应用程序(我将其视为桌面应用程序)可以涵盖第二点。第三个可以为RIA完成,但需要一些努力(同样适用于ajax应用程序)。

        如果您的目标很简单,并且不了解现代桌面/ ria开发工具和技术,这可能是开发Web应用程序的另一个好理由。但正如我所说 - 我希望这会很简单。

答案 13 :(得分:0)

这两种应用都有优点和缺点。例如,Web应用程序可能需要考虑不同的浏览器,并且获取可用的UI在Web中比在Windows窗体中更难。但是,网络应用程序确实也有一些优势。首先想到的是部署,不需要担心不同的平台(只是不同的浏览器 - 是的,不同平台的开发比不同的浏览器更难)。