如何在开发 Web 应用程序和桌面应用程序之间做出决定 [关闭]

Posted

技术标签:

【中文标题】如何在开发 Web 应用程序和桌面应用程序之间做出决定 [关闭]【英文标题】:How to decide between developing a web application and a desktop application [closed] 【发布时间】:2017-07-25 01:46:24 【问题描述】:

我是一家制造公司的软件工程师实习生,他们希望我为该公司开发一个应用程序。他们倾向于使用 Web 应用程序,但是我想知道桌面应用程序是否更适合这项工作。因此,我一直在谷歌上搜索并查看 ***,以了解桌面应用程序和 Web 应用程序之间的优缺点。以下基本上是我发现的:

快速免责声明,我有 C# 和 WPF 的背景,所以我有点偏见,因为我开发桌面应用程序会更容易。我没有 Web 经验,因此在该领域我无话可说,这就是为什么我想更多地了解这个应用程序是否更适合作为 Web 应用程序或桌面应用程序。我绝对愿意学习 php 和 Web 开发以扩展我的能力。我已经开始(有点)研究使用 Php7 和 Laravel 框架开发 Web 应用程序。

桌面应用程序的优点:

    通常比 Web 应用程序更快(假设 Web 应用程序将执行复杂的查询、计算等,而不仅仅是显示标记) GUI 的开发速度更快 桌面应用程序默认为私有,因此更加安全。 有更多可用控件可为用户提供更丰富和互动的体验(或者至少,与基于 Web 的应用程序相比,这些控件在基于桌面的应用程序上实施起来更容易/更快) 可以利用用户硬件。

桌面应用程序的缺点:

    使用/部署受系统限制(不过,这应该不是问题,因为我们所有的系统都是基于 Windows 的。) 必须手动执行更新和安装。 如果每个客户端桌面都有一个数据库连接,则无法进行扩展 很好,因为数据库负载很重。 (不过,这大概 不会,因为我们的用户不会超过 500 个)。

Web 应用程序的优点

    跨平台(无需处理不同的操作系统),便于移植 开发简单快捷 部署很容易,因为更新是自动和服务器端的。 大型社区支持和可用框架。

Web 应用程序的缺点

    更大的开销(由于需要通过 Internet 传输数据,应用程序往往会变慢)。 需要处理不同的浏览器。 javascript 很可能需要在一个 Web 平台(Chrome、Firefox 等)上进行调整以使其完美,而在其他平台上则不完美。 (不过,这没什么大不了的)。 安全是一个问题,因为数据将是公开的。

如果以上任何内容已过时(我发现的大多数帖子都是 2011 年或更早的帖子)或错误的,请告诉我。另外,如果还有其他优点/缺点需要考虑。

继续应用描述......

公司背景:我们每天制造和加工数十种不同的零件。对于每种类型的零件,在加工X数量的零件后,需要取样进行检验。例如,零件 Y 每 120 分钟抽取 3 个样品进行检查(因为机器通常在 120 分钟内完成 X 数量的加工)。然后将检测结果(测量数据)存储在数据库(mysql 数据库)中。

应用程序用途的一般摘要:

    查看我们设计的所有部件的原理图(我们将所有原理图以 pdf 格式存储在网络驱动器上,因此这只是从驱动器中提取特定的 pdf 文件并将其显示到应用程序中)。 查看/更新公司所有机器的状态(他们在做什么,在线/离线等)。某个用户(检查员)将使用此应用程序来更新机器状态/信息。然后另一个用户(操作员)将使用该应用程序查看状态。 监控部件检查。因此,对于正在处理的每台机器和零件,都会有一个计时器让操作员用户知道何时需要提交某个零件进行检查。零件提交后,检查员将收到检查零件的通知,在让应用程序知道他们完成检查后,计时器将重新启动,以让操作员知道他们下次需要提交零件的时间。李> 应用程序将从检测结果中获得的零件测量值计算统计数据(例如,Cpk 值),并将统计数据与图形/图表一起显示。

我希望我已经足够清楚地解释了所有这些。其他一些需要注意的事情,据我了解,用户不需要远程访问。此应用程序几乎只能在公司网站上使用。此外,该公司想要一个 Web 应用程序的最初原因是因为运营商将使用平板电脑来运行该应用程序,而他们购买的平板电脑是基于 android 的。但是,他们决定改用 Windows Surface 平板电脑,因此现在可以使用 WPF 应用程序。

说了这么多,我真的很想知道有更多经验的人会推荐什么路线。我还在上大学,所以请原谅我缺乏知识/经验。在选择 Web 应用程序和桌面应用程序时,我还应该考虑什么?

以下是我在思考这个话题时看到的一些页面:

    Advantages of web applications over desktop applications https://www.quora.com/How-much-different-is-it-to-build-a-web-application-vs-a-desktop-application https://www.quora.com/What-are-the-advantages-and-disadvantages-of-web-based-application-development-vs-desktop-application-development

有更多的 *** 页面,但上面列出的页面几乎包含其他页面所述的所有内容。

编辑:到目前为止,似乎网络应用程序正在获胜(我一点也不介意,我真的很高兴能够根据我所听到的开发一个网络应用程序)。有没有人愿意做一个桌面应用程序?如果有,为什么?

【问题讨论】:

它看起来是基于意见(或过于具体),但因为他们有这么快的截止日期,所以无论什么技术都能更快地完成工作。那么WPF,是吗?只做最低限度的工作。 是的,对不起。我的帖子有偏见,因为我没有网络开发经验,所以我很难谈论它。但是,如果截止日期不是那么快,您会推荐什么?项目描述中是否有任何听起来偏向桌面应用程序的区域?我试图保持这部分的客观性。 我希望具体的细节能帮助有人给我更具体的建议。也许它产生了相反的效果,只是让帖子陷入了不必要的信息。 :( 我将尝试简化这一点。可能不需要包括我发现的优点/缺点...... 【参考方案1】:

我天生对网络应用有偏见。由于浏览器,它们很难正确处理,它们通常是不安全的(尽管是偶然的)。该平台很糟糕(JavaScript 和来自随机人员/组织的大量库),“一切都是字符串”。我可以继续。

但不可否认,它是接触广泛的公众受众并允许持续更新的最佳平台。

在企业环境中,优势确实会消失,但并非完全消失。例如,更新通常可以通过将所有 .exe 和 DLL 存储在共享目录中来实现。正如您所说,您可以使用 Windows 平台更快、更便宜地构建更丰富的 UI。

关于您的架构,在类似情况下对我有用的是拥有一个 Windows 前端,但也有业务逻辑、数据访问(连接池)和在无状态 Web 上处理的胆量服务器(或两个)通过 Web 服务从 UI 访问(您选择的协议 - 由于 WCF 和 WSDL,我更喜欢 SOAP,但很多人不会)。

这允许集中数据访问和放置一次性批处理作业或计算的地方,然后可以共享。它还有一个优点是,如果您需要做一些真正密集的事情,并不是每台客户端机器都必须具备这种能力。

您的情况似乎符合此模型,但在没有大量内部知识的情况下,这主要是意见,但可能需要考虑。

【讨论】:

这绝对是我没有考虑过的模型。我会仔细看看的。谢谢你的快速反应! :)【参考方案2】:

对我来说,这听起来像是组装或类似的公司工作流程监控。

如果我必须构建这个应用程序,那么首先我会搜索并做一些研究,如果你想要的功能是可能的并且易于使用你将使用的编程语言开发

例如,如果我选择使用基于网络的开发,那么:

更大的开销(由于需要 通过互联网传输数据)。

你可以使用内网和规格好的服务器电脑

需要处理不同的浏览器。 Javascript 很可能需要 在一个 Web 平台(Chrome、Firefox 等)上进行调整以使其完美 并且不会在其他方面完美。 (但是,这并没有那么大 交易)。

然后设置在您的工作场所工作的标准浏览器

查看我们设计的所有零件的原理图(我们存储所有 示意图作为网络驱动器上的 pdf,所以这只是拉 从驱动器请求的特定 pdf 并将其显示到 应用程序)。

您可以将 pdf 上传到服务器并使用 pdf 查看器插件(如 pdfjs 或类似插件)在浏览器中查看它

查看/更新公司所有机器的状态(哪些零件 他们是否在工作,是否在线/离线等)。某个用户 (Inspector) 将使用此应用程序更新机器 状态/信息。然后另一个用户(操作员)将使用 申请查看状态

机器有ip吗? 我可以对机器使用 ping 功能来确定机器是否在线以减轻任务吗? 如果不是,那么检查员检查机器的时间表是什么? 当然,检查员可以登录系统,然后使用 Web 应用程序手动更新机器状态

监控零件检查。因此,对于每台机器和零件 处理后,会有一个计时器让 Operator 用户知道 某些部分需要提交检查。部分 提交,然后检查员将收到检查通知 该部分,并在让应用程序知道他们完成后 检查,计时器将重新启动,让操作员知道何时 下次他们需要提交零件时。

这听起来像是调度机制以确保质量,您可以使用 jquery 制作计时器并使用 ajax 向操作员发送通知,其中包含需要检查的特定部分的特定数据

应用程序将计算统计数据(例如,Cpk 值)来自从检查结果获得的零件测量值 并将统计数据与图形/图表一起显示。

这个取决于你的统计公式,你可以使用highchart这个插件

确保你选择的编程语言能够完成你想要的任务之后的第二个是设计数据库结构

Linus Torvalds 的引述:

"Bad programmers worry about the code. Good programmers worry about data structures and their relationships."

祝你有美好的一天,祝你好运,好好考虑一下,避免未来的发展问题

【讨论】:

我同意这个答案,所以我不发布一个。但是从大约 11 年前我从桌面转换为基于 Web 的第一个主要应用程序的一些经验教训: 1-内部服务器(= Intranet)处理速度问题,尽管对于许多应用程序来说,超高速宽带都不是问题更多的; 2-即使主要是内部的,远程用户的易于访问(带防火墙)对于网络来说也是一个很大的 +;只要您说“没有 Internet Explorer”,3 浏览器几乎不是问题; 4-与非Windows(例如Mac)的兼容性; PHP 很棒,因为您可以将它用于 Web 和命令行进行本地处理。 从这里,听起来您更倾向于 Web 应用程序。我已经完成了这项研究,并且相当肯定这项工作可以作为 Web 应用程序或桌面应用程序来完成。这是因为它可以以两种方式实现,我想知道哪种方法更好以及出于什么原因。但我想,在没有人知道所有细节的情况下,真的很难解释为什么一种方法会比另一种更好。 @manassehkatz 感谢您的回复。我真的很喜欢听人们的经历。只是出于好奇,是否有任何重大的设计原因让您决定将桌面应用程序转换为基于 Web 的应用程序?如果是这样,我可以知道为什么吗?另外,您会说您的应用程序作为基于 Web 的应用程序性能更好吗?假设它作为基于 Web 的应用程序与桌面应用程序相比显然不是更好的东西(就像 Gmail 作为网络应用程序的效果更好,而编辑器作为桌面应用程序的效果更好)。 @JonTan 那么另一个问题是: - 开发需要更多努力吗? - 每种方法的成本是多少?哦还有一件事:web应用你只需要替换服务器中的代码即可更新应用,无需手动安装每台电脑 Web 应用程序肯定会花费更多的精力。在成本方面......我不知道。我的第一个假设是 Web 应用程序的成本会更高,因为它需要托管在专用服务器上。但是,即使我做了一个桌面应用程序,数据库也会托管在同一个专用服务器上......所以我认为成本大致相同,我不确定其他成本。

以上是关于如何在开发 Web 应用程序和桌面应用程序之间做出决定 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用消息传递(例如 RabbitMQ)与使用 Web 服务进行后端组件交互/通信之间做出决定?

我应该如何在我的应用程序的 Flutter 移动版和网页版之间做出一些区别?

Web 与桌面应用程序中的耦合和设计模式

桌面应用程序和 Web 前端之间的通信

在 JS Web 和 .NET 桌面 UI 之间进行选择

Windows Phone开发:当好总舵主