我们如何确定一个项目是基于Web的还是基于桌面的?

时间:2020-03-06 15:02:34  来源:igfitidea点击:

我在确定我的项目是否要基于Web(例如在Web应用程序中),基于桌面(桌面应用程序)或者可以同步或者连接到云的桌面应用程序时遇到麻烦。

我不知道是否有人会对这个应用程序感兴趣,而且这只适合我,所以我倾向于桌面应用程序。如果出于某种原因,我完成了它,然后发布了它,并且人们确实喜欢它,那么我可能还会考虑使其与云同步(请考虑v2)。但是我不确定做出如此重大的改变有多困难,并且我不想最终得到一些没用的好东西,因为我什至在开始该项目之前就做出了错误的选择。

有什么指导吗?有任何经验法则或者最佳做法吗?有个人经验吗?

如果语言很重要,那么我之所以考虑Java是因为我对Java最为满意,它可以轻松地让我与朋友共享它进行测试,以及是否遇到麻烦并需要其他人的帮助。

解决方案

如果我们发布为网络应用程序,则无需将其移植。无论我们身在何处,都可以使用它。

我的默认选择是使用Web解决方案,因为它更易于部署并且通常为多平台。我唯一使用winforms应用程序的时间是在迫切需要安全性,性能或者功能性问题的情况下。

以前,我们已经编写了一个桌面应用程序,因为工具对此更好,并且编写速度更快。人们曾经想使用Web应用程序,但总是以台式机结尾。

如今情况有所不同,我们可以快速便捷地编写Web服务,因此没有理由不使用基于Web的服务。

基于Web的优点是灵活性,可伸缩性和易于部署。它不会像台式机应用程序那样具有响应能力,但是如果我们考虑设计,这并不是什么大问题。

我的选择主要基于GUI。如果GUI会变得很复杂,并且(需要快速运行或者需要花费很多时间来进行处理),那么我将使用台式机。如果它很简单,并且总是有小的数据集可以同时使用,那么我将继续使用Web。

我曾经开发过一个作为Web应用程序开发的应用程序,当时显然它更适合于台式机。这是一次巨大的失败。我不知道客户如何接受它,因为我当然不会使用它。台式机版本(重写花费了6个月的时间)使Web版本彻底崩溃了。

话虽如此,我已经看到了一些不错的Web应用程序。

我通常会问几个问题:

  • 甚至可以在网络上完成吗?我不久前还涉及一个图像编辑组件,并且必须是一个Web应用程序。要完成这项工作会涉及很多痛苦,而台式机应用程序本来应该是更好的选择。
  • 我需要从任何地方访问它吗?是的,我们可以将其加载到拇指驱动器上,但是在这种情况下,使用网络要可行得多。
  • 会有多个用户吗?可以采用任何一种方式,但是"长尾巴"的东西通常意味着网络。
  • 我们想使用什么技术?最新和最强大的基于WPF的UI?台式机(是的,Silverlight,让我们不要去那里好吗?)。笨拙的Django或者其他用户轻松管理用户的大脑?网络。
  • 如果它是一个Web应用程序,我们是否需要担心常见的攻击媒介,例如SQL Injection,XSS等?台式机应用程序在这里也有其自身的问题,但接触风险较小。
  • 它是如何消耗资源的? 10位用户会破坏Web服务器的性能吗?
  • 在桌面上进行版本控制可能会很麻烦,而使用Webapp时,每个人都使用相同的版本。不过,这可能会伤到我们,请参阅"新Facebook用户"回推。

编辑:

  • 成本也可能是一个因素。具有数据库后端的Web应用程序通常表示Web服务器。如果我们要坚持使用Microsoft Stack,则需要价格昂贵的SQL Server许可证。开源更便宜,但并非在所有情况下都是一种选择。通常,"服务"桌面应用程序比较便宜。

我只建议几个相关的因素。如何确定因子的答案和权重取决于我们和其他情况:

  • 你的听众是什么?我们对它们有控制权吗?
  • 我们期望实现的交互有多复杂?
  • 我们需要近实时数据更新吗?
  • 我们希望多长时间更新一次应用程序?
  • 我们是否需要一套定义明确的客户端平台,或者我们无法预测到这一点?

请注意,选择还可以包括Java WebStart应用程序,它可以减轻典型桌面应用程序的某些缺点。

有时网络可能是好的,有时却不是。我们正进入网络的新潮流,但不要忘记以下几点:

  • Web中的GUI由于使用多个浏览器而更加复杂
  • 需要在系统上工作的人可能不喜欢在浏览器中全天工作
  • 对于某些应用程序,Web可能会变慢(图像编辑,需要大量CPU的艰苦工作)
  • 像Visual Studio for Winform一样的Rapid Gui比Web更快

但是Web在部署和可移植性方面具有许多优势。如果系统结构良好,则可以使用MVC构建某些东西,或者两者都做,也可以换成另一种。只需更改视觉效果,我们就可以了。

我会说大多数应用程序都应该基于桌面。优势是更快,更流畅的应用程序。

仅当Web应用程序具有明显的好处(例如从任何地方访问)时,才应创建该Web应用程序。 (如果这对于应用程序是必需的。)

Web应用程序的缺点还在于它依赖于开发人员,如果我们放弃支持它,则所有用户(如果有)将无法再使用它。此外,用户有可能不愿在线存储其数据。

最终,这取决于我们要编写哪种类型的应用程序。即使将其创建为桌面应用程序,也可以稍后将其重写为Web。无论如何,2.0版的软件通常几乎都需要完全重写。

如果这是一个供多个用户使用的共享数据应用程序,那么我们可能还是想要一台服务器。在那种情况下,我倾向于使用Web应用程序。
否则,我们将拥有在台式机和服务器之间同步数据的复杂性。

到目前为止尚未列出的两个重要问题:

  • 第一个版本是否具有需要对硬件进行低级别访问的功能?
  • 将来的版本中是否有需要降低硬件访问权限的功能?

回答第一个问题很容易,但是给第二个问题一些想法可以使我们免于头痛。